欧拉问题:
如果我们列出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
答案 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;
}
}