所以,我对javascript还不熟悉,在完成了关于codecademy的JS单元之后,我正在通过Project Euler来获得对语言的更好的感觉。问题是我被第二次挑战困住了。在这点上我觉得很蠢。问题是找到所有小于400万的偶数斐波那契数之和。
var fib = [1,2];
var stack = [];
for (i = 2; i < 4000000; i++) {
fib[i] = fib[i - 1] + fib[i - 2];
}那部分起作用。我正在使用JSFiddle,它将打印出高达400万的斐波纳契序列。问题是下一部分:
for (j = 0; j < fib.length; j++) {
if (fib[i] % 2 === 0) {
stack[j] = fib[i];
}
}我在for循环内部和外部都尝试过这一点,但我无法理解这一点。我有种感觉,我错过了一些显而易见的东西。任何帮助都将不胜感激。谢谢:D
编辑:我想明白了。谢谢大家!我所做的是:
var total = 0;
var fib = [1, 2];
//In my first attempt, I made a set of the first 4,000,000
//fibonacci numbers. I just left the "4000000" there
//arbitrarily.
for (i = 2; i < 4000000; i++) {
//This makes sure that I don't go over 4000000 in the array.
if (fib[i - 1] < 4000000) {
fib[i] = fib[i - 1] + fib[i - 2];
}
}
for (j = 0; j < fib.length; j++) {
if (fib[j] % 2 === 0) {
total += fib[j];
}
}
alert(total);它打印出正确的答案!哇哦。
发布于 2015-08-11 19:28:01
我看到了一些问题。
你说你想找出所有连斐波那契数之和?我没有必要将偶数结果放到另一个数组中,然后处理它们。试着做这样的事情:
var fib = [1,2];
var result = 0;
for (i = 2; i < 4000000; i++) {
fib[i] = fib[i - 1] + fib[i - 2];
}
for (j = 0; j < fib.length; j++) {
if(fib[j] % 2 == 0){
result = result + fib[j];
}
}其次,你可以把它说成“连斐波那契数都少于400万”。你确定他们要的是前400万斐波纳契数,还是低于400万的斐波纳契数?
发布于 2015-08-11 19:10:54
替换这个
for (j = 0; j < fib.length; j++) {
if (fib[i] % 2 === 0) {
stack[j] = fib[i];
}
}有了这个
for (j = 0; j < fib.length; j++) {
if (fib[j] % 2 === 0) {
stack[j] = fib[i];
}
}而且,问题是只需要在4_000_000以下找到斐波纳契数。没有必要创建400万斐波纳契数字。那要花很长时间。试试小一点的,比如70。
https://stackoverflow.com/questions/31949820
复制相似问题