每日一题3.11.1
每日一题3.11.1
题目描述:求一个数,变成fibnoacci数的最小步数
解题思路: 依次比较fibnoacci数列,找到比N小的最大fibnoacci数和比N大的最小fibnoacci数,分别计算与N的差值,取最小的输出
代码实现:
#include <iostream>
using namespace std;
int min(int a, int b)
{
if (a > b)
return b;
else
return a;
}
int main()
{
int N;
while (cin >> N)
{
int f0 = 0, f1 = 1, f, a, b;
while (1)
{
f = f0 + f1;
f0 = f1;
f1 = f;
if (f<N)
{
a = N - f;
}
else
{
b = f - N;
break;
}
}
cout << min(a, b) << endl;
}
return 0;
}
参考答案: