Fibonacci數列是這樣定義的: F[0] = 0 F[1] = 1 for each i ≥ 2: F[i] = F[i-1] + F[i-2] 因此,Fibonacci數列就形如:0, 1, 1, 2, 3, 5, 8, 13, ...,在Fibonacci數列中的數我們稱為Fibonacci數。給你一個N,你想讓其變為一個Fibonacci數,每一步你可以把當前數字X變為X-1或者X+1


Fibonacci數列是這樣定義的:
F[0] = 0
F[1] = 1
for each i ≥ 2: F[i] = F[i-1] + F[i-2]
因此,Fibonacci數列就形如:0, 1, 1, 2, 3, 5, 8, 13, ...,在Fibonacci數列中的數我們稱為Fibonacci數。給你一個N,你想讓其變為一個Fibonacci數,每一步你可以把當前數字X變為X-1或者X+1,現在給你一個數N求最少需要多少步可以變為Fibonacci數。 

輸入描述:
輸入為一個正整數N(1 ≤ N ≤ 1,000,000)



輸出描述:
輸出一個最小的步數變為Fibonacci數"

 

輸入例子:
15

 

輸出例子:
2

定義了一個斐波那契數組,產生足夠多的斐波那契數,查找其中Fib[i-1]<=n並且Fib[i+1]>=n的位置,找到n到這另個位置的最小值
#include<iostream>
#include<algorithm>
using namespace std;
const int N=100000;
int Fbi[N];

int main()
{
    Fbi[0]=1;
    Fbi[1]=1;
    for(int i=2;i<N;i++)
    {
        Fbi[i]=Fbi[i-1]+Fbi[i-2];
    }
    int n;
    while(scanf("%d",&n)>0)
    {
       int i=0; 
       for(;i<N-1;i++)
        {
           if(Fbi[i]<=n&&Fbi[i+1]>=n)
               break;
       }
        int minstep=min(n-Fbi[i],Fbi[i+1]-n);
        cout<<minstep<<endl;
    }
    return 0;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM