输入a;
最终目的:a最少多少步可以变为fib数
思路:找到距离a最近的两个fib数
一个小于等于a设为left,一个大于a设为right;
输出:min(a-left,right-a);
#include <iostream> using namespace std; int main() { int a; while (cin >> a) { int f=0,f1=0,f2=1,left,right; while(1){ f=f1+f2; f1=f2; f2=f; if(f<=a){ left=f; }else{ right=f; break; } } cout<<min(a-left,right-a)<<endl; } } // 64 位输出请用 printf("%lld")