解析:
求N变为斐波那契数需要的步数,可以转化为求N与a、b最小差值问题。
当N<=a时,abs(N-b)的差值最小,当a<N<b时,取abs(N-b)和abs(N-a)中的较小值
当N>=b <c时(c和啊和b的和),i ≥ 2: F[i] = F[i-1] + F[i-2]求出下一个斐波那契数c,然后使b=c,a=b,开始下一次判断。
#include<stdio.h>
#include<stdlib.h>
int main()
{
int a=0;
int b=1;
int c=a+b;
int N;
scanf("%d",&N);
while(1)
{
if(b==N)
{
printf("%d",abs(N-b));
break;
}
if(b>N)
{
if(abs(N-b)<abs(N-a))
{
printf("%d",abs(N-b));
}
else
{
printf("%d",abs(N-a));
}
break;
}
if(b<N&&c>=N)
{
printf("%d",abs(N-b));
break;
}
c=a+b;
a=b;
b=c;
}
return 0;
}