Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

Zeckendorf의 정리를 위한 C++ 프로그램?

<시간/>

여기서 우리는 이웃하지 않은 피보나치 수를 추가하여 주어진 합계를 찾았는지 여부를 확인하는 방법을 볼 것입니다. 그렇다면 숫자는 무엇입니까? 예를 들어, 주어진 합계 값이 10이면 이것은 8과 2의 합입니다. 8과 2는 모두 피보나치 항이며 인접하지 않습니다. 아이디어를 얻을 수 있는 알고리즘을 살펴보겠습니다.

알고리즘

비NeighbourFibo(합계)

Begin
   while sum > 0, do
      fibo := greatest Fibonacci term but not greater than sum
      print fibo
      sum := sum - fibo
   done
End

예시

#include<iostream>
using namespace std;
int fibonacci(int n) {
   if (n == 0 || n == 1)
      return n;
   // get the greatest Fibonacci Number smaller than n.
   int prev = 0, curr = 1, next = 1;
   while (next <= n) {
      prev = curr;
      curr = next;
      next = prev + curr;
   }
   return curr;
}
void nonNeighbourFibo(int sum) {
   while (sum > 0) {
      int fibo = fibonacci(sum);
      cout << fibo << " ";
      sum = sum - fibo;
   }
}
int main() {
   int sum = 120;
   cout << "Sum is same as Non-adjacent Fibonacci terms: ";
   nonNeighbourFibo(sum);
}

출력

Sum is same as Non-adjacent Fibonacci terms: 89 21 8 2