2017-03-19 6 views
1

現在、ユーザー入力を持つWindowsフォームアプリケーション(WPA)にevenフィボナッチ数を見つけるプログラムを作成中です。すべての偶数フィボナッチ数の合計をユーザー入力で求める

私のプログラムを実行するとき、私は自分が持っているテストデータとは違った別のデータを持ってきます。私は、入力として100,000を入力すると、例えば、

を私は取得しています出力は5500034ですが、それは私のプログラムの60696.

コードである必要があり、次のとおりです。

 int val1 = 1; 
     int val2 = 2; 
     Int64 evenTerms = 2; 
     val2 = int.Parse(textBox3.Text); 
     while (val2 < 5000000) 
     { 
      int temp = val1; 
      val1 = val2; 
      val2 = temp + val2; 
      if (val2 % 2 == 0) 
      { 
       evenTerms += val2; 
      } 
     } 
     MessageBox.Show("" + val2); 

誰でも助けることができます私は問題を整理しますか?

ありがとうございました。私の知る限り、あなたの問題を理解しているよう

+0

フィボナッチ数を計算してもよろしいですか?私が誤解していないと、あなたの例で数字1と10000で始まるので... – MetaColon

答えて

1

私はすべてフィボナッチ数を列挙する発電を使用することをお勧め:

public static IEnumerable<long> FiboGen() { 
    long left = 0; 
    long right = 1; 

    yield return left; 
    yield return right; 

    while (true) { 
    long result = left + right; 

    yield return result; 

    left = right; 
    right = result; 
    } 
} 

、その後LINQの必要な値のみ合計する:

int limit = int.Parse(textBox3.Text); 

// 60696 for the 1000000 limit 
// 4613732 for the 5000000 limit 
var result = FiboGen()   // take Fibonacci numbers 
    .Where(val => val % 2 == 0)  // but only even ones 
    .TakeWhile(val => val < limit) // and less than limit 
    .Sum();       // finally sum them up. 

MessageBox.Show(result.ToString()); 
0

(質問は不明である)、希望このソリューションが動作します:)

 int val1 = 0; 
     int val2 = 1; 
     Int64 evenTerms = 0; 
     int val3 = int.Parse(textBox3.Text), val4 = 0, temp; 
     if (val3 < 5000000) 
     { 
      while (val4 < val3){ 
       temp = val1 + val2; 
       val1 = val2; 
       val2 = temp; 
       if (temp % 2 == 0) 
       { 
        evenTerms += 1; 
       } 
       val4++; 
      } 
     } 
     MessageBox.Show("" + evenTerms); 
+0

あなたの入力をありがとう – AppleKIdd

0

、フィボナッチの最初は、1,1,2,3-で始まります...あなたがリストの一歩先を行くことを意味します。 val1 = 1、val2 = 1で始める必要があります。

https://en.wikipedia.org/wiki/Fibonacci_number

その後、なぜあなたは、あなたの計算の一部としてご入力のparamを使用していますか?!

+1

フィボナッチの最初は0,1,1,2,3で始まります.... –

+0

@pantherあなたは私の答えでWikipediaへの参照を見つけることができます。あなたはより良いリファレンスを持っていますか?あなたの信念ではなく、リンクを共有してください。 –

0
#include <math.h> 
#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 
#include <assert.h> 
#include <limits.h> 
#include <stdbool.h> 

int main() { 

typedef unsigned long ulong; 

ulong fib(ulong a, ulong b, ulong * odd_z, ulong n) { 
    ulong c = a + b; 
    if((c+b) >= n) { return 0; } 
    if(a%2 == 0) { *odd_z+=(b+c); } 
    return fib(b,c,odd_z, n); 
} 

int T; 
scanf("%d",&T); 
ulong odd_z = 0; 
ulong *sum = &odd_z; 

while(T--) { 
    ulong N; 
    scanf("%lu",&N); 
    fib(0,1,&odd_z, N); 
    printf("%lu\n",*sum); 
    *sum=0; 
} 
return 0; 

} 

このアルゴリズムithmも時間と空間の効率が良い

関連する問題