Перечислить все пифагорейские тройки в Java
Мне нужно найти все пифагорейские тройки (a^2+b^2=c^2) со значениями A и B менее 100. Мои коды не дают мне правильного вывода. Может кто-нибудь сказать мне, что пошло не так с моими кодами, и вместо этого написать правильные коды?
public static void main(String[] args) {
int sum = 0;
for (int num1 = 1; num1 <= 100; num1++) {
for (int num2 = 1; num2 < 100; num2++) {
if (PerfectSquare(num1, num2, sum)) {
System.out.println(num1 + " " + num2);
}
}
}
}
public static boolean PerfectSquare(int number1, int number2, int sum) {
int square1;
int square2;
double root;
int sum1;
number1 = (int) ((99 - 1 + 1) * Math.random() + 1);
number2 = (int) ((99 - 1 + 1) * Math.random() + 1);
square1 = (int) Math.pow(number1, 2.0);
square2 = (int) Math.pow(number2, 2.0);
sum = square1 + square2;
root = Math.sqrt(sum);
sum1 = (int) Math.pow(root, 2.0);
if (!(sum == sum1)) {
return false;
}
return true;
}
1 ответ
Вы перезаписываете свой number1
а также number2
параметры со случайными числами:
number1 = (int) ((99 - 1 + 1 ) * Math.random() + 1);
number2 = (int) ((99 - 1 + 1 ) * Math.random() + 1);
Вы можете также не передавать какие-либо значения в метод, если вы делаете это. Удалить эти строки.
Также вам нужно округлить квадратный корень до целого числа:
root = (int) Math.sqrt(sum);
так как в противном случае вы получите то же самое число, когда возьмете его снова.
Другие моменты, не связанные с правильностью:
Вы можете поставить квадратные целые числа без необходимости разыгрывать, умножив их на себя:
square1 = number1 * number1;
Это:
if (! (sum==sum1) ) {
легче написать как
if (sum != sum1) {
Ваш
sum
Параметр метода не нужен. Объявите это как локальную переменную.Вам не нужно перебирать все пары
num1
а такжеnum2
, так как если(num1, num2)
противоположные и смежные стороны пифагорейской тройки, то(num2, num1)
явно слишком (аналогично, еслиnum1
а такжеnum2
нет, тогдаnum2
а такжеnum1
тоже нет). Таким образом, вы можете проверить меньше комбинаций, используя:for (int num1 = 1; num1 <= 100 ; num1++) { for (int num2 =1; num2 <num1; num2++) {