If I want to find all the Pythagorean Triplets in a specific range, I wrote the following code:
JavaScript
x
for (int a = 1; a < range; a++) {
for (int b = 1; b < range; b++) {
for (int c = 1; c < range; c++) {
if (a * a + b * b == c * c) {
System.out.println(a + "," + b + "," + c);
}
}
}
}
But unfortunately I got duplicated triplets, for example: 3, 4, 5 and 4, 3, 5
How can I overcome this?
Advertisement
Answer
You can remove duplicates by changing your loops, particularly where each one starts:
JavaScript
for (int a = 1; a < range; a++) {
for (int b = a + 1; b < range; b++) {
for (int c = b + 1; c < range; c++) {
if (a * a + b * b == c * c) {
System.out.println(a + "," + b + "," + c);
}
}
}
}
Notice that the inner loop is unnecessary since you can calculate c
directly from a
and b
. You just have to check if the calculated value is an integer:
JavaScript
for (int a = 1; a < range; a++) {
for (int b = a + 1; b < range; b++) {
double c = Math.sqrt(a*a + b*b)
if (c == int(c)) {
System.out.println(a + "," + b + "," + c);
}
}
}