我需要找到所有毕达哥拉斯三元组(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;
}
答案 0 :(得分: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++) {