找到总和为1000的pythogorean三联体的程序,无法弄清楚为什么它不起作用?

时间:2017-03-02 06:59:42

标签: java math

import java.util.*;
public class Euler9
{
    public static void main (String[] args) 
    {
        double a=3, b=4, c=5;
        double pdt=0;
        int i;
        for(i=0;i<=500000;i++)
        {
            if ((a*a)+(b*b)==(c*c))
            {
                System.out.println("a = "+a+" b = "+b+" c = "+c+" is a pyth tripl.");
                if ((a+b+c)==1000.0)
                {
                    pdt=a*b*c;
                    break;
                }
            }
            a++;
            b++;
            c++;
        }
        System.out.println(pdt);
    }
}

嘿,我一直在尝试为我正在学习的课程做一些Euler问题,这是我的解决方案是Euler9,https://projecteuler.net/problem=9但是由于某种原因我不能让这段代码起作用。无论我设置的价值如何,它似乎在一次迭代后结束,我无法弄清楚为什么我的生活。谢谢你的帮助。

4 个答案:

答案 0 :(得分:1)

如果你使用多个for循环做了类似的事情,你可以减少你的代码很多,我也不认为这个任务需要使用double或导入java.util.*;当你是完全不使用它:

class Euler9 {
  public static void main(String[] args) {
    int sum = 1000;
    for(int a = 1; a <= sum/3; a++) {
      for (int b = a + 1; b <= sum/2; b++) {
        int c = sum - a - b;
        if (a*a + b*b == c*c) {
          System.out.format("a=%d, b=%d, c=%d\n", a, b, c);
        }
      }
    }
  }
}

<强>输出:

a=200, b=375, c=425

答案 1 :(得分:0)

您正在同时递增abc

从本质上讲,你只是想要

  • 3 ^ 2 + 4 ^ 2 = 5 ^ 2
  • 4 ^ 2 + 5 ^ 2 = 6 ^ 2
  • 5 ^ 2 + 6 ^ 2 = 7 ^ 2
  • 6 ^ 2 + 7 ^ 2 = 8 ^ 2
  • ...
  • 100 ^ 2 + 101 ^ 2 = 102 ^ 2
  • 等......

虽然暴力算法(只是尝试每个选项)不是最好的方法,但如果你想坚持你的方法,你可能想尝试在单独的循环中增加a,b,c。

答案 2 :(得分:0)

您无法立即增加所有这些内容。你可以做点什么

for(int a = 0; a < 100; a++)
    for(int b = 0; b < 100; b++)
        for(int c = 0; c < 100; c++)
           if(a^2 + b^2 == c^2)
              ...

答案 3 :(得分:-1)

我现在看到我对三联体的理解是有缺陷的。我假设a,b,c是满足条件的三个连续自然数(a ^ 2 + b ^ 2 = c ^ 2)。事实并非如此,正如一个简单的谷歌搜索所示。