2017-03-19 2 views
1

현재 사용자 입력이있는 Windows Form 응용 프로그램 (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

@pherher 코더, 당신은 내 대답에 위키 피 디아에 대한 참조를 찾을 수 있습니다. 너 더 좋은 레퍼런스가 있니? 당신의 믿음이 아니라, 그 연결을 공유하십시오. –

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 또한 시간과 공간을 효율적으로 사용합니다