Перечислить все пифагорейские тройки в 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++) {
    
Другие вопросы по тегам