输入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")

京公网安备 11010502036488号