首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Euler项目,#1

Euler项目,#1
EN

Stack Overflow用户
提问于 2014-01-20 04:35:31
回答 4查看 533关注 0票数 0

我的代码似乎不适用于项目Euler,问题1。该问题声明:

如果我们列出所有低于10的自然数,它们是3或5的倍数,我们得到3,5,6和9。这些倍数之和是23。 找出低于1000的3或5倍数之和。

我的程序的输出是

266333

我的代码是:

代码语言:javascript
复制
private static final int max = 1000;
    private static int sum;

    public static void main(String[] args)
    {
        addMultiples(3);
        addMultiples(5);
        System.out.println(sum);
    }

    private static void addMultiples(int mult)
    {
        int x = mult;
        while(x < max)
        {
            sum += x;
            x += mult;
        }
    }

似乎数学的基本原理只是在逃避我,如果我找不到这样一个简单问题的解决方案的话,这真的会阻碍我成为一名程序员。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-01-20 04:41:15

首先,最重要的是,不会气馁,。这只是一个问题,它是一个非常糟糕的指标,作为一个程序员的潜力。只要继续练习,不管怎么说,你的错误更多的是数学而不是编程。

如果我们列出3小于16的倍数,我们得到: 3,6,9,12,15。如果我们列出5小于16的倍数,我们得到: 5,10,15。

看到问题了吗?

你数了十五次。您可能会找到实现,所以我不会给您代码。那不会让你好起来的。

而且,这个问题可以用数学和和更有效地解决,但我会留给你们。

票数 6
EN

Stack Overflow用户

发布于 2014-01-20 04:39:57

您所犯的错误是将35的倍数相加,类似于15倍。

代码语言:javascript
复制
public static void main(String[] args) {
    long sum = 0;
    for(int i = 0; i <= 1000; i++) if(i%3==0 || i%5==0) sum += i;
    System.out.println(sum);
}
票数 2
EN

Stack Overflow用户

发布于 2014-01-20 04:38:49

这里有个小错误。

15是5的倍数,3的倍数。

您可以做的一件事(这是我的功能方面)是创建一个从0到最大的列表。然后创建一个方法,取出所有3的倍数,并将它们添加到结果列表中,并从输入列表中删除它们。这个现在被剪裁的列表被传递给一个方法,该方法过滤掉5的所有倍数,并将它们添加到相同的输出列表中。

你取你的清单之和。

编辑: Johannes Trümpelmann的解决方案很短,可读性更强,而且性能更好,所以您可能需要使用该解决方案。:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21226309

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档