Java 欧拉2号项目;代码无法输出正确答案
给出的问题:斐波那契序列中的每个新项都是通过将前两项相加而生成的。从1和2开始,前10个术语将是: 1、2、3、5、8、13、21、34、55、89 通过考虑Fibonacci序列中值不超过400万的项,求偶数值项之和 有人能帮我找出我的代码的逻辑错误吗?它没有报告正确的答案,尽管我认为它是正确的。谢谢输出为500693,本应为19544084Java 欧拉2号项目;代码无法输出正确答案,java,Java,给出的问题:斐波那契序列中的每个新项都是通过将前两项相加而生成的。从1和2开始,前10个术语将是: 1、2、3、5、8、13、21、34、55、89 通过考虑Fibonacci序列中值不超过400万的项,求偶数值项之和 有人能帮我找出我的代码的逻辑错误吗?它没有报告正确的答案,尽管我认为它是正确的。谢谢输出为500693,本应为19544084 long val1 = 1, val2 = 1, valEven = 2, total = 0; while (val2 < 4000000 &a
long val1 = 1, val2 = 1, valEven = 2, total = 0;
while (val2 < 4000000 && val1<4000000) {
total += valEven; //only add even numbers to total
val1 += val2 + valEven;
val2 += val1 + valEven;
valEven += val1 + val2;
}
System.out.println(total);
long val1=1,val2=1,valEven=2,total=0;
而(val2<4000000&&val1问题陈述是(来自):
斐波那契序列中的每个新项都是通过添加
前两个学期。从1和2开始,前10个学期将
是:
1、2、3、5、8、13、21、34、55、89
通过考虑Fibonacci序列中的项,其值不
超过四百万,求偶数项之和
你应该做什么:
- 列出小于400万的斐波那契数
- 遍历它们并计算该列表中偶数的总和
你做错了什么:
- 你得到斐波那契数的逻辑是错误的
- 您没有检查偶数
如果你想使用“斐波那契中每三分之一的数字是偶数”这一事实,那么你应该按顺序得到三个数字,然后将三分之一加到总数中。我认为你使用的运算符是错误的
a += b;
意味着
代码应该是这样的:
long val1 = 1, val2 = 1, valEven = 2, total = 0;
while (val2 < 4000000 && val1 < 4000000) {
total += valEven; // only add even numbers to total
val1 = val2 + valEven;
val2 = val1 + valEven;
valEven = val1 + val2;
}
System.out.println(total);
long val1=1,val2=1,valEven=2,total=0;
而(val2<4000000和&val1<4000000){
total+=valEven;//仅将偶数添加到total中
val1=val2+valEven;
val2=val1+valEven;
valEven=val1+val2;
}
系统输出打印项次(总计);
答案是:4613732
这是关于调试的一般性答案
我在代码中添加了println语句以查看中间结果
4 7 13
24 44 81
149 274 504
927 1705 3136
5600910
2
8
34
144
610
2584
10946
46368
196418
832040
3524578
4613732
这是可运行的代码
public class FibonacciTest {
public static void main(String[] args) {
long val1 = 1, val2 = 1, valEven = 2, total = 0;
while (val2 < 4000000 && val1 < 4000000) {
total += valEven; // only add even numbers to total
val1 += val2 + valEven;
val2 += val1 + valEven;
valEven += val1 + val2;
if (val1 < 1000L)
System.out.println(val1 + " " + val2 + " " + valEven);
}
System.out.println(total);
}
}
正如你所看到的,你没有正确地计算斐波那契序列,所以你没有正确地计算偶数之和
首先,让我们修正斐波那契数列。你需要3个值来正确计算斐波那契数列。让我们在长常量后面加上一个“L”
public class FibonacciTest {
public static void main(String[] args) {
long val1 = 1, val2 = 2, val3 = 2, total = 0;
while (val1 < 4_000_000L) {
if (val1 < 1000L) {
System.out.println(val1 + " " + val2 + " " + val3);
}
val3 = val1 + val2;
val1 = val2;
val2 = val3;
}
System.out.println(total);
}
}
现在我们已经正确地生成了斐波那契序列,让我们把偶数相加
public class FibonacciTest {
public static void main(String[] args) {
long val1 = 1L, val2 = 2L, val3 = 2L, total = 0L;
while (val1 < 4_000_000L) {
val3 = val1 + val2;
val1 = val2;
val2 = val3;
if (val1 % 2L == 0L) {
System.out.println(val1);
total += val1;
}
}
System.out.println(total);
}
}
我得到了4613732的和。你使用了一个聪明的事实,在斐波那契序列中,数字是奇偶,奇奇偶,…(因为加法)
int valOdd1=1,valOdd2=1,valEven=2;
长总计=0;
while(valEven)这还不足以诊断您的问题。您必须提供预期的(正确的)答案和您得到的实际答案。请编辑您的问题并添加这些。您应该为问题添加更多描述。只需粘贴Euler问题2的问题说明。感谢您的反馈。在斐波那契序列中,每三项中有一个偶数。您介意描述一下我获取斐波那契数的逻辑吗s是错的,并且检查偶数?@tsalemy如果你想使用“斐波那契中每三个数都是偶数”这一事实然后你应该按顺序得到3个数字,然后将第三个数字加到总数中。我认为你使用的运算符+=是错误的。请参阅答案中的更新。是的,很有意义,这是我不理解的关键逻辑错误。非常有帮助的答案。
public class FibonacciTest {
public static void main(String[] args) {
long val1 = 1L, val2 = 2L, val3 = 2L, total = 0L;
while (val1 < 4_000_000L) {
val3 = val1 + val2;
val1 = val2;
val2 = val3;
if (val1 % 2L == 0L) {
System.out.println(val1);
total += val1;
}
}
System.out.println(total);
}
}
2
8
34
144
610
2584
10946
46368
196418
832040
3524578
4613732
int valOdd1 = 1, valOdd2 = 1, valEven = 2;
long total = 0;
while (valEven <= 4000000) {
total += valEven; //only add even numbers to total
valOdd1 = valOdd2 + valEven;
valOdd2 = valEven + valOdd1;
valEven = valOdd1 + valOdd2;
}
valOdd1' = valOdd2 + valEven;
valOdd2' = valEven + valOdd1';
valEven' = valOdd1' + valOdd2';
valOdd2' = 2*valEven + valOdd2;
valEven' = 3*valEven + 2*valOdd2;
int valOdd2 = 1, valEven = 2;
long total = 0;
while (valEven <= 4000000) {
total += valEven; //only add even numbers to total
int nextValOdd2 = 2*valEven + valOdd2;
valEven = 3*valEven + 2*valOdd2;
valOdd2 = nextValOdd2;
}