项目欧拉,2号

时间:2015-08-11 18:56:35

标签: javascript

所以,我是javascript的新手,并且 - 在完成了对codecademy的JS单元之后,我正在通过Project Euler工作以更好地感受这种语言。问题在于我坚持第二次挑战。在这一点上我觉得很愚蠢。问题是找到所有偶数斐波纳契数不到四百万的总和。

var fib = [1,2];
var stack = [];

for (i = 2; i < 4000000; i++) {
    fib[i] = fib[i - 1] + fib[i - 2];
}

那部分有效。我使用JSFiddle,它将打印出最多四百万的斐波纳契序列。问题是下一部分:

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);

它打印出正确的答案!活泉。

2 个答案:

答案 0 :(得分:1)

替换此

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这样的小东西。

答案 1 :(得分:-1)

我看到了几个问题。

你说你想找到所有偶数斐波纳契数的总和?我没有意识到将偶数结果放入另一个数组然后处理它们。尝试这样的事情:

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];
    }
}

其次,你把它称为&#34;所有甚至斐波纳契数都不到400万&#34;。你确定他们想要的是前400万个斐波那契数,还是需要400万以下的斐波纳契数?