【问题标题】:Euler Challenge 1 in Java - I'm doing something wrong?Java中的欧拉挑战1 - 我做错了什么?
【发布时间】:2024-01-18 16:06:01
【问题描述】:

http://projecteuler.net/problem=1

嘿。我是一名高中生,试图很好地掌握编程问题,所以我访问了 Project Euler。对于问题 1,我用 Java 编写了一些可以解决问题的代码,但显然出了点问题。我可以对什么有所了解吗?

说明: 我在索引值 332 处停止所有内容,因为 Java 从 0 开始计数,而 333 * 3 是 999,低于 1,000。 Apples 是一个单独的类,代码几乎相同,尽管它计为 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;
            }
        }
    }
}

【问题讨论】:

  • 使用System.out 打印出信息并减少迭代以查看计算出错的地方。这是基本的调试,在 * 上提问之前应该做什么。
  • 不要使用System.out 使用该死的调试器。
  • 在您的问题陈述中,您说“Java 从 0 开始计数”,但为什么会这样呢?你的计数器是从 1 计数到 332,为什么 java 会有什么不同?

标签: java arrays sum


【解决方案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

【讨论】:

  • 没想到。我不认为编程适合我:谢谢!
  • @user113580 欢迎您:)。顺便说一句,我不会撒谎,编程不是最简单的事情,但它绝对适合每个人(它只需要大量的坚持和练习,而且不同的人以不同的速度学习不同的东西,所以不要轻易放弃)。
  • @user113580 不要轻易放弃!在数 3 和 5 的倍数时,不小心将 15 数两次是很容易错过的事情。重要的是要从中吸取教训。干杯!