将一个数进行 +1 或 -1,计算最少需要进行多少次可变为一个斐波那契数。
例:
输入:7
输出:1
思路:
利用前两个数求出后面的斐波那契数列,当计算到大于输入的数字时停止计算,此时输入的数位于数列最后两个数之间,分别求出与两数之间的距离并比较,返回较小值。
实现:
int fib(int n)
{
int n1 = 0;//第一个数
int n2 = 1;//第二个数
int n3 = n1 + n2;//第三个数
while (1)
{
if (n == 0)//若输入的数等于0说明是第一个数,无法进行计算,直接返回0
return 0;
if (n < n2)//若输入的数小于n2,到了n1和n2之间
{
if ((n - n1) < (n2 - n))//计算到两边数的距离,返回较小的距离
return n - n1;
else
return n2 - n;
}
n1 = n2;//若输入的数大于n2,则继续求出后面数列
n2 = n3;
n3 = n1 + n2;
}
}