2015-12-02 2 views
0

Мне нужно найти все пифагорейские троек (a^2 + b^2 = c^2) со значениями A и B, меньшими 100. Мои коды не дают мне правильный результат. Может ли кто-нибудь сказать мне, что пошло не так с моими кодами, и вместо этого написать правильные коды?список всех пифагорейских триплетов в java

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; 
} 
+8

С одной стороны, вы переписав '' number1' и параметры number2' со случайными числами. –

ответ

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++) { 
    
+0

Я, наконец, понял. Благодаря! – bt203

Смежные вопросы