题目描述:
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;
}