題目描述:
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數。
輸入描述:
輸入爲一個正整數N1 ≤ N ≤ 1,000,000
輸出描述:
輸出一個最小的步數變爲Fibonacci數
示例
輸入:15 輸出:2
解題思路:
把給定的這個數在斐波那契數列中比較,看它在那兩個數中間,然後看這兩個數哪一個與它的差值最小,就是所需的最小步數。
代碼
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int N;
cin >> N;
int f0 = 1, f1 = 1,tmp;
while (N>f1)
{
tmp = f0;
f0 = f1;
f1 += tmp;
}
cout << min(N - f0, f1 - N);
system("pause");
return 0;
}