Initial data commit
This commit is contained in:
parent
72d218235f
commit
f23f22d71c
199087 changed files with 3378941 additions and 0 deletions
77
Task/Heronian-triangles/Java/heronian-triangles.java
Normal file
77
Task/Heronian-triangles/Java/heronian-triangles.java
Normal file
|
|
@ -0,0 +1,77 @@
|
|||
import java.util.ArrayList;
|
||||
|
||||
public class Heron {
|
||||
public static void main(String[] args) {
|
||||
ArrayList<int[]> list = new ArrayList<>();
|
||||
|
||||
for (int c = 1; c <= 200; c++) {
|
||||
for (int b = 1; b <= c; b++) {
|
||||
for (int a = 1; a <= b; a++) {
|
||||
|
||||
if (gcd(gcd(a, b), c) == 1 && isHeron(heronArea(a, b, c))){
|
||||
int area = (int) heronArea(a, b, c);
|
||||
list.add(new int[]{a, b, c, a + b + c, area});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
sort(list);
|
||||
|
||||
System.out.printf("Number of primitive Heronian triangles with sides up "
|
||||
+ "to 200: %d\n\nFirst ten when ordered by increasing area, then"
|
||||
+ " perimeter:\nSides Perimeter Area", list.size());
|
||||
|
||||
for (int i = 0; i < 10; i++) {
|
||||
System.out.printf("\n%d x %d x %d %d %d",
|
||||
list.get(i)[0], list.get(i)[1], list.get(i)[2],
|
||||
list.get(i)[3], list.get(i)[4]);
|
||||
}
|
||||
|
||||
System.out.printf("\n\nArea = 210\nSides Perimeter Area");
|
||||
for (int i = 0; i < list.size(); i++) {
|
||||
if (list.get(i)[4] == 210)
|
||||
System.out.printf("\n%d x %d x %d %d %d",
|
||||
list.get(i)[0], list.get(i)[1], list.get(i)[2],
|
||||
list.get(i)[3], list.get(i)[4]);
|
||||
}
|
||||
}
|
||||
|
||||
public static double heronArea(int a, int b, int c) {
|
||||
double s = (a + b + c) / 2f;
|
||||
return Math.sqrt(s * (s - a) * (s - b) * (s - c));
|
||||
}
|
||||
|
||||
public static boolean isHeron(double h) {
|
||||
return h % 1 == 0 && h > 0;
|
||||
}
|
||||
|
||||
public static int gcd(int a, int b) {
|
||||
int leftover = 1, dividend = a > b ? a : b, divisor = a > b ? b : a;
|
||||
while (leftover != 0) {
|
||||
leftover = dividend % divisor;
|
||||
if (leftover > 0) {
|
||||
dividend = divisor;
|
||||
divisor = leftover;
|
||||
}
|
||||
}
|
||||
return divisor;
|
||||
}
|
||||
|
||||
public static void sort(ArrayList<int[]> list) {
|
||||
boolean swapped = true;
|
||||
int[] temp;
|
||||
while (swapped) {
|
||||
swapped = false;
|
||||
for (int i = 1; i < list.size(); i++) {
|
||||
if (list.get(i)[4] < list.get(i - 1)[4] ||
|
||||
list.get(i)[4] == list.get(i - 1)[4] &&
|
||||
list.get(i)[3] < list.get(i - 1)[3]) {
|
||||
temp = list.get(i);
|
||||
list.set(i, list.get(i - 1));
|
||||
list.set(i - 1, temp);
|
||||
swapped = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue