## The challenge

You have to give the number of different integer triangles with one angle of 120 degrees which perimeters are under or equal a certain value. Each side of an integer triangle is an integer value.

 ``````1 2 `````` ``````// number of integer triangles, give_triang(max. perimeter) ``````

with sides a, b, and c integers such that:

a + b + c <= max. perimeter

See some of the following cases

 `````` 1 2 3 4 5 6 7 8 9 10 11 `````` ``````// No Integer triangles with perimeter under or equal five give_triang(5) // 0 // One integer triangle of (120 degrees). It's (3, 5, 7) give_triang(15) // 1 // Three triangles: (3, 5, 7), (6, 10, 14) and (7, 8, 13) give_triang(30) // 3 // (3, 5, 7), (5, 16, 19), (6, 10, 14), (7, 8, 13) and (9, 15, 21) are the triangles with perim under or equal 50. give_triang(50) // 5 ``````

## The solution in Java code

Option 1:

 `````` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 `````` ``````public class IntTriangles { public static int giveTriang(int per) { int cnt = 0; int a = 3; while (a < per) { if (2*a > per) break; int b = a; while (b < per) { if (a + 2*b > per) break; double c = Math.sqrt(a*a + a*b + b*b); if ((c % 1 == 0) && (a+b+c <= per)) cnt++; b++; } a++; } return cnt; } } ``````

Option 2:

 `````` 1 2 3 4 5 6 7 8 9 10 11 12 `````` ``````public class IntTriangles { public static int giveTriang(int per) { int res = 0; for(int i =1;ik&&j+k>i&&k+i>j&&k%1==0) res++; } return res; } } ``````

Option 3:

 `````` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 `````` ``````public class IntTriangles { public static int giveTriang(int per) { int count = 0; for (int a = 1; a < per / 2; a++) { for (int b = 1; b < a; b++) { double cSquare = a * a + b * b + a * b; int c = (int)Math.sqrt(cSquare); if (c * c == cSquare && a + b + c <= per) { count++; } } } return count; } } ``````

## Test cases to validate our solution

 `````` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 `````` ``````import static org.junit.Assert.*; import java.util.Random; import org.junit.Test; public class IntTrianglesTest { private static void testing(int i, int results) { assertEquals(results, i); } public static void tests(int[] list1, int[] results) { for (int i = 0; i < list1.length; i++) testing(IntTriangles.giveTriang(list1[i]), results[i]); return; } @Test public void test1() { System.out.println("Basic Tests"); int[] list1 = new int[] {5, 15, 30, 50, 80, 90, 100, 150, 180, 190}; int[] results = new int[] {0, 1, 3, 5, 11, 13, 14, 25, 32, 35}; tests(list1, results); } } ``````