当前位置: 首页 > 知识库问答 >
问题:

Project Euler 9解决方案没有给出正确的结果

隆芷阳
2023-03-14

问题是:

下面是我的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;
    }

}

共有1个答案

尤博达
2023-03-14
for(int i = 997; i>499; i--){

你停得太早了。如果a a+b+c==1000,则c的最小可能值不是500,而是335。

for(int i = 997; i>335; i--){

使用这个新的下限,b偶尔会大于c,这会过早地触发一些条件。不过,您可以删除它们,并仍然得到正确的答案。

    for(int i = 997; i>335; i--){
        c = i;
        b = 999-i;
        a = 1;

        while(b>(a+2)){
            b--;
            a++;
            if (isTriplet(a,b,c)){
                product=a*b*c;
                break outerloop;
            }
        }
    }

 类似资料:
  • 我知道这可能会被选为副本(因为我已经看到了这张使用Dijkstra算法的负权重图,所以我认为其中没有一个答案是我想要的。我对Dijkstra算法在有一条负边的图中的解感兴趣,但Dijkstra仍然会显示正确的解。那张图会是什么样子?我无法想象,或者我不擅长enough需要了解Dijkstra如何处理负边缘。我知道有一个带负边的图,可以用Dijkstra遍历,并且仍然有正确的路径。请不要告诉我使用贝

  • 我们让一个实习生用自上而下的方法解决最小硬币问题。问题陈述给出了一组硬币,返回构成总和所需的最小硬币。此外,还应返还构成金额的硬币。 这是密码 代码在大部分情况下看起来不错。但不会返回预期的结果。当使用上述输入执行时,程序返回INT.MAX作为minCoins,列表为空。 有关于代码哪里出错的提示吗?谢谢

  • 在使用docplex解决优化问题后,我在访问解决方案时遇到了问题。 下面我发布了我使用的完整代码,只要我得到结果(结果有注释): 优化问题在本文的优化后问题中得到了充分的解释 所以我有两个问题: 我不明白为什么要使用mdl函数。print_solution()给出的结果与我在mdl中枚举解决方案时的结果不同。解决方案 提前感谢您的帮助。问候。

  • 我是机器学习和OpenCV的新手。我从Cohn-Kanade人脸数据库中为每种情绪(中性和快乐)拍摄了一组10张图像。然后,我从每个图像中提取面部特征,并将它们放入我的训练数据矩阵中,并为各自的情绪分配标签(例如:0表示中性,1表示快乐)。 我使用了gamma=0.1和C=1的RBF内核。经过训练后,我将从智能手机摄像头中提取出的面部特征用于预测。预测总是返回1。 如果我增加中性表达式的训练样本数

  • 我在这么多地方发现了这么多与此相关的问题。 当我在命令提示符中输入ant-version时,会打印以下内容: 无法定位tools.jar.预计在C:\Program Files\Java\jre1.8\libtools.jar Apache Ant版本1.9.4于2014年4月29日编译 尽管它说的是“找不到tools.jar……”它也在打印版本号。 除了复制工具,其他所有解决方案都不起作用。ja