gpt4 book ai didi

java - 列出java中所有毕达哥拉斯三元组

转载 作者:行者123 更新时间:2023-12-01 10:48:20 25 4
gpt4 key购买 nike

我需要找到 A 和 B 值小于 100 的所有毕达哥拉斯三元组 (a^2+b^2=c^2)。我的代码没有给我正确的输出。谁能告诉我我的代码出了什么问题并编写正确的代码?

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

最佳答案

您正在用随机数覆盖 number1number2 参数:

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 方法参数是不必要的。将其声明为局部变量。

  • 您不需要循环遍历所有 num1num2 对,因为如果 (num1, num2) 是毕达哥拉斯三元组的对边和相邻边,那么 (num2, num1) 显然也是(同样,如果 num1num2 不是,那么 num2num1 也不是)。因此,您可以使用以下方法检查更少的组合:

    for (int num1 = 1; num1 <= 100 ; num1++) {
    for (int num2 =1; num2 <num1; num2++) {

关于java - 列出java中所有毕达哥拉斯三元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34053388/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com