Euler 1,代码不起作用

时间:2016-10-21 16:32:00

标签: c#

欧拉问题:

如果我们列出10以下的所有自然数是3或5的倍数,我们得到3,5,6和9.这些倍数的总和是23.

查找低于1000的3或5的所有倍数的总和。

我试图从projecteuler.net提出第一个问题。我的代码如下:

    int check = 3;
        int result = 0;
        for (int i = 1; i < 1000; i++)
        {
            if (i == check)
            {
                result += i;
                check += 3;
            }
        }
        check = 5;
        for (int i = 1; i < 1000; i++)
        {
            if (i == check)
            {
                result += i;
                check += 5;
            }
        }

        Console.WriteLine(result);
        Console.ReadKey();

我知道它可以更好地优化,但我的代码不起作用,我不知道为什么。我用10而不是1000测试它然后它的工作原理。有人看到了这个错误吗?

编辑:我的代码确实有效,但结果不对。当我使用i&lt;时,我得到了正确的结果for循环中的10

3 个答案:

答案 0 :(得分:4)

您的代码存在问题:

您正在检查1到1000之间的数字,这是3的倍数。接下来,您还要检查下一个数字从1到1000,这是5的倍数。

但是,你忘了可能有几个数字是3和5的倍数(例如,15,30等)。

所以,你应该在一个循环中执行你的操作,而不是先用3和5来检查它。

喜欢:

int sum = 0;
for(int i=lower_limit;i<=upper_limit;i++){
    if(i%3==0 || i%5==0)
    sum = sum+i;
}

答案 1 :(得分:1)

在编写代码时,它会将值{15}添加到result两次 一次因为15是3的倍数,再次因为15是5的倍数。

这对我来说似乎不对。您只想在总和 一个 时间内计算15个。

答案 2 :(得分:0)

如果您的号码是3 5(例如15)的倍数,则将其添加到result两次。只需使用带有模运算符的单循环:

    int result = 0;
    for (int i = 1; i < 1000; i++)
    {
        if (i % 3 == 0 || i % 5 == 0)
        {
            result += i;
        }
    }