【发布时间】:2017-12-20 04:47:13
【问题描述】:
我是 C# 编程的新手,我认为尝试欧拉问题作为入门基础是一个好主意。但是,我已经到了无法获得问题 2 正确答案的地步。
“斐波那契数列中的每一项新项都是通过将前两项相加生成的。从 1 和 2 开始,前 10 项将是:
1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
通过考虑斐波那契数列中值不超过四百万的项,求偶数项之和。”
我的代码是这样的:
int i = 1;
int j = 2;
int sum = 0;
while (i < 4000000)
{
if (i < j)
{
i += j;
if (i % 2 == 0)
{
sum += i;
}
}
else
{
j += i;
if (j % 2 == 0)
{
sum += j;
}
}
}
MessageBox.Show("The answer is " + sum);
基本上,我认为我只获取序列的最后两个偶数并将它们相加 - 但我不知道如何获取序列的所有偶数并将它们相加。在尝试从我的起点取得进展的同时,有人可以帮助我吗?
附: - 如果有任何非常糟糕的布局选择,请说现在消除这些将帮助我将来成为更好的程序员:)
非常感谢。
【问题讨论】:
-
我看不出有什么问题。我建议放入调试语句,然后将输出添加到您的问题中。例如:每次循环后输出 i、j 和 sum。
-
重新检查。 1)这不是 int 溢出 2)您只检查每个第二个元素的结束条件,但这也不是您的问题的原因。
-
您只在循环顶部测试 i>4000000。但是有可能 i 或 j 在计算它们的下一个值之后可能会超过该值,然后将超出范围的值添加到 sum 中。您应该在计算下一个新值之后,但在更新总和之前测试是否终止。
-
@hatchet 虽然这是一个错误,但他很幸运,这个特定的截止点没有击中它,因为超过限制的数字是奇数。