牛客网链接: link.
解题思路:
在一个Fibonacci数列中找到N这个数的相邻的左右数,然后在进行判断,就可以得到变为Fibonacci数最少需要几步。
#include<iostream>
using namespace std;
int main()
{
int f , f1 = 0,f2 = 1;
int N;
cin >> N;
int left = 0,right = 0;
while(1)
{
//得到Fibonacci数列
f = f1 + f2;
f1 = f2;
f2 = f;
if(f < N)
{
left = f; //这个是会不断的更新的,直到最接近为止
}
else
{
right = f;
break;
}
}
cout << min(N-left,right-N)<<endl; //min()是一个std标准库里面的函数,可以直接使用
return 0;
}