测试是对的,但答案仍然是错的
本文关键字:答案 仍然是 测试 | 更新日期: 2023-09-27 18:07:50
在尝试使用数组解决c#中的Euler问题1后,我被指出只有在满足for()循环的条件时才添加单个变量。代码显然更好了,但是我看不出我做错了什么。
目标是取前1000个数字,找到3或5的因子,最后将因子相加。我在做前10个,我知道是23,然后再做1000个。控制台读取完美,直到for()循环完成,当我在最后问代码的最终答案,然而,它给了我33!代码如何在循环后向sum变量添加任何东西!!它在嘲弄我…
using System;
public class Problem1
{
public static void Main()
{
int sum = 0;
//assign range to evaluate factors and summation
int maxNumber = 10;
//test if i is a factor of 5 or 3
for(int i = 1; i <= maxNumber; i++)
{
if (i % 3 == 0 || i % 5 == 0)
{
//WriteLine here to debug, the real magic here is adding i to sum when test is true
Console.WriteLine(sum);
sum += i;
}
}
//and the final answer is?
Console.WriteLine(sum);
//uncomment below line if running in vbs
Console.ReadLine();
}
}
让我们"运行"你的代码:
- 1 ?继续
- 2 ?继续
- 3 ?添加
- 4 ?继续
- 5 ?添加
- 6 ?添加
- 7 ?继续
- 8 ?继续
- 9 ?添加
- 10 ?添加
10、9、6、5、3的和为33
因为maxNumber
也被计算。
改变:
for(int i = 1; i <= maxNumber; i++) // i=3,5,6,9,10 => sum = 33
:
for (int i = 1; i < maxNumber; i++) // i=3,5,6,9 => sum = 23
当
maxNumber == 10
选择的数字是3, 5, 6, 9, 10
,和是33(不是23)。通解可能是这样的(Linq):
int sum = Enumerable
.Range(1, maxNumber)
.Where(item => (item % 3 == 0) || (item % 5 == 0))
.Sum();
当maxNumber == 1000
时,答案为234168
。如果想要排除 maxNumber
,只需减去1:
int sum = Enumerable
.Range(1, maxNumber - 1) // <- subtract 1
.Where(item => (item % 3 == 0) || (item % 5 == 0))
.Sum();
所以10
的答案是23
1000
的答案是233168