Проблема заключается в том:Проект Эйлера 9 Решение не дает правильный результат
пифагорейцем триплет представляет собой набор из трех натуральных чисел, в < б < с, , для которого,
а^2 + b^2 = c^2 Например, 3^2 + 4^2 = 9 + 16 = 25 = 5^2.
Существует ровно один пифагорейский триплет, для которого a + b + c = 1000. Найти продукт abc.
Таким образом, используя функцию tripletP() Я думаю, что программа генерирует все возможные комбинации из 3 сумматоров для числа 1000. и функции isTriplet (а, б, в) в этом коде, никогда не возвращает истины и значение int продукта равно 0 в конце. Я не могу найти недостаток в своей логике, любая помощь будет оценена.
Вот мой Java класс с кодом, который я думал, что позволит решить проблему 9:
public class ProblemNine {
public static void main(String[] args) {
ProblemNine f = new ProblemNine();
System.out.println(f.tripletP());
}
boolean isTriplet(int a, int b, int c){
if((a*a)+(b*b)==(c*c)){
return true;
} else return false;
}
int tripletP(){
int a=1,b=2,c=997;
int product = 0;
//outerloop generates all possible combinations of 3 summators for the number 1000, if b>c>a is true
outerloop:
for(int i = 997; i>499; i--){
c = i;
b = 999-i;
a = 1;
while(b>(a+2) && (a+b) == (1000-i) && a!=b && c>b){
b--;
a++;
// supposedly checks if a,b,c are a triplet.
if (isTriplet(a,b,c)){
product=a*b*c;
break outerloop;
}
}
if(c>997 || b>499 || a>249){
break outerloop;
}
}
return product;
}
}
'Math.pow()' использует арифметику с плавающей запятой, поэтому вы не можете безопасно сравнивать результаты, так как могут быть небольшие различия. Просто используйте 'a * a' для квадратов ints. –
'Math.pow' действительно дорогой и более подробный, чем' a * a' –
В моих других попытках я использовал a * a, и результат был таким же. – Stabbz