牛客网刷题
题目****ID:45846 --Fibonacci数列
链接:https://www.nowcoder.com/practice/18ecd0ecf5ef4fe9ba3f17f8d00d2d66?tpId=85&&tqId=2984
6&rp=1&ru=/activity/oj&qru=/ta/2017test/question-ranking
【题目解析】:
本题是对于Fibonacci数列的一个考察,Fibonacci数列的性质是第一项和第二项都为1,后面的项形成递归:
F(n) = F(n - 1) + F(n - 2)。
【解题思路】:
本题可以通过先找到距离N最近的两个Fibonacci数,这两个数分别取自距离N的最近的左边一个数L和右边一
个数R,然后通过min(N - L, R - N)找到最小步数。
#include <iostream>
using namespace std;
int main()
{
int f,r,l,N,f0=0,f1=1;
cin>>N;
while(1)
{
f = f0+f1;
f0 = f1;
f1 = f;
if(f<N)
{
l = N-f;//左边距离
}
else
{
r = f-N;//右边距离
break;
}
}
if(r>l)
cout<<l<<endl;
else
cout<<r<<endl;
return 0;
}