【问题标题】:All Pythagorean Triplets in a range一个范围内的所有毕达哥拉斯三元组
【发布时间】:2021-06-07 19:35:46
【问题描述】:

如果我想找到特定范围内的所有毕达哥拉斯三元组,我编写了以下代码:

for (int a = 1; a < range; a++) {
        for (int b = 1; b < range; b++) {
            for (int c = 1; c < range; c++) {
                if (a * a + b * b == c * c) {
                    System.out.println(a + "," + b + "," + c);
                }
            }
        }
    }

但不幸的是,我得到了重复的三元组,例如:3、4、5 和 4、3、5
我该如何克服这个问题?

【问题讨论】:

    标签: java math duplicates


    【解决方案1】:

    您可以通过更改循环来删除重复项,尤其是在每个循环开始的地方:

    for (int a = 1; a < range; a++) {
            for (int b = a + 1; b < range; b++) {
                for (int c = b + 1; c < range; c++) {
                    if (a * a + b * b == c * c) {
                        System.out.println(a + "," + b + "," + c);
                    }
                }
            }
        }
    

    请注意,内部循环是不必要的,因为您可以直接从 ab 计算 c。您只需检查计算的值是否为整数:

    for (int a = 1; a < range; a++) {
            for (int b = a + 1; b < range; b++) {
                double c = Math.sqrt(a*a + b*b)
                if (c == int(c)) {
                    System.out.println(a + "," + b + "," + c);
                }
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多