项目Euler#2,Fibonacci,javascript尝试

时间:2016-08-27 08:15:12

标签: javascript fibonacci

我试图在项目euler上做一些问题。对于第二个,我确实得到了正确的答案,但我有点作弊。

继承问题:

  

Fibonacci序列中的每个新术语都是通过添加前两个术语生成的。从1和2开始,前10个术语将是:

     

1,2,3,5,8,13,21,34,55,89,......

     

通过考虑Fibonacci序列中的值不超过四百万的项,找到偶数项的总和。

继承我的代码:

package namo.jims.com.webviewapp;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class MainActivity extends AppCompatActivity {
    WebView webview;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        webview= (WebView)findViewById(R.id.webview);
        webview.setWebViewClient(new MyBrowser());
        webview.loadUrl("http://rchitecture.in/app1/");
        webview.getSettings().setLoadWithOverviewMode(true);
        webview.getSettings().setUseWideViewPort(true);
        webview.getSettings().setJavaScriptEnabled(false);
        webview.getSettings().setAllowFileAccess(true);
        webview.getSettings().setAllowContentAccess(true);
        webview.setScrollbarFadingEnabled(false);

    }
    private class MyBrowser extends WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }
    }

}

我将sum加2,因为我无法为代码添加初始的fib [1],这本身就是偶数。感谢。

6 个答案:

答案 0 :(得分:1)

如果你从[1,2]开始,你得到的第一个斐波纳契数是3.

在你的循环中你有:

i = 1+2 = 3
i = 2+3 = 5

所以简单地从[0,1]开始:

i = 0+1 = 1
i = 1+1 = 2
i = 1+2 = 3

固定代码:

var fib = [0,1];
var i = 0;
var sum = 0;
while (fib[0]+fib[1] < 4000000){
    i= fib[0]+fib[1];
    fib[0]=fib[1];
    fib[1]=i;

        if(i%2 === 0){
        sum += i;
    }
}
console.log(sum);

答案 1 :(得分:0)

for (var sum = 0, i = 0, j = 0, k = 1; 4e6 > j + k; i++) i = j + k, j = k, k = i, sum += 0 == i % 2 ? i : 0;
  

它可以帮助你。

答案 2 :(得分:0)

简单的解决方案

var sum = 0;
var term1 = 1;
var term2 = 1;

while (term2 < 4000000) {
    term2 = term1 + term2;
    term1 = term2 - term1;
    sum += term2 % 2 === 0 ? term2 : 0;
}
console.log(sum);

答案 3 :(得分:0)

let num1 = 0; 
let num2 = 1;
let total = 0;
let num3 = 0;
let i = 0;
while(num1 + num2 < 4000000){
     num3 = num1 + num2;
     num1 = num2; //as loop keep going is changes the position of number
     num2 = num3; //as loop keep going is changes the position of number
     if(num3 % 2 === 0 ){ // check weather number is even or not 
        total += num3;    //every even number gets added
        }
     i++
}
console.log(total);

答案 4 :(得分:0)

function firstNofFibonacci(n)
{
    let fibArr = [];
    for (let i = 0; i < n; i++) {
        if (fibArr.length > 1) {
            fibArr.push(fibArr[fibArr.length - 1] + 
                fibArr[fibArr.length - 2]);
        } else {
            fibArr.push(i);
        };
    };
    return fibArr;
}

答案 5 :(得分:-1)

这是我同样问题的代码。它并不完美,但我希望这能帮助读这篇文章的人。

&#13;
&#13;
function fibonacci(stop) {
  var a = 1, b = 0, c, storage = []
  for (var i = 0; a < stop; i++) {
    c = a
    a = a + b
    b = c
    if (b%2 == 0) {
      let even = b
      storage.unshift(even)
    }
  }
  var all = storage.reduce((x, y) => {return x + y}, 0)
  console.log(all)
}

fibonacci(4000000); // 4613732
&#13;
&#13;
&#13;

好吧,我在这里做的是我用stop参数创建一个函数(你告诉函数停止)然后我创建变量来制作Fibonacci序列并创建一个变量来存储偶数值。然后推送数组中的所有偶数值,在函数的末尾我添加变量中的所有值和console.log()值

如果你有建议或意见全部听到:)