Java中的Euler Challenge 1 - 我做错了什么?

时间:2014-08-28 22:08:32

标签: java arrays sum

http://projecteuler.net/problem=1

嘿。我是一名高中生,想要很好地掌握编程问题,所以我访问了Project Euler。对于问题1,我用Java编写了一些可以解决它的代码,但是显然出现了问题。我可以获得一些关于什么的见解吗?

说明: 我在索引值332处停止所有内容,因为Java从0开始计数,而333 * 3是999,低于1,000。苹果是一个单独的类,具有几乎相同的代码,虽然它的数量为5.最后,我手动将两个答案加在一起,但它不对。我究竟做错了什么? 两个最终的总和是:

三:164838

五:97515

public class Learning {
    public static void main(String[] args){
        int three[] = new int[333];
        int counter = 0;
        three[332] = 0;
        int totalthree = 0;
        int threeincrementer = 1;
        int grandtotal;
        boolean run = true;
        boolean runagain = true;


        for (counter = 1; counter<=332; counter++){
            three[counter] = 3 * counter;
            if (!(three[332] == 0)){
                System.out.println("Finished three.");

                while (run == true){
                    totalthree = totalthree + three[threeincrementer];
                    threeincrementer++;
                    if (threeincrementer >= 332){
                        run = false;
                        System.out.println("Three final is: " + totalthree);
                        }       
                    }
                }


        if (runagain == true){
        apples ApplesObject = new apples();
        ApplesObject.rerun(0);
        runagain = false;
            }
        }
    }
}

1 个答案:

答案 0 :(得分:1)

有些数字同时是3和5的乘法,如15,所以你不应该分别计算3的乘法和5的乘法之和,而是加上它们,因为你最终会做类似的事情

sum3 = 3,6,9,12,15,...

sum5 = 5,10,15,...

所以首先sum3将包含15,sum5也会包含它,这意味着您将添加15次。现在要平衡您的计算,您需要从sum3+sum5总和中减去所有乘以15的总和

sum15 = 15,30,45,...

因此,使用您的方法,您的最终公式应该看起来像sum3+sum5-sum15

但是这个问题的简单解决方案可能看起来像

sum = 0 
for each X in 1...999 
   if (X is multiplication of 3) OR (X is multiplication of 5)
      add X to sum

要检查某个数字X是否是数字Y的乘法,您可以使用modulo运算符%(示例reminder = X % Y)查找一个数字除以另一个数字的余数。

您可以找到更多Java运算符here