1.什么是斐波那契数
斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)
2.题目
给你一个N,你想让其变为一个Fibonacci数,每一步你可以把当前数字X变为X-1或者X+1,现在给你一个数N求最少需要多少步可以变为Fibonacci数。
输入描述:
输入为一个正整数N(1 ≤ N ≤ 1,000,000)
输出描述:
输出一个最小的步数变为Fibonacci数"
#include <stdio.h>
int main()
{
int N = 0;
scanf("%d", &N);
int a = 1;
int i = 1;
int j = 0;
while (1)
{
j = a;
a +=j;
if (a > N)
break;
}
a += 1;
int tem = (a - N) < (N - j) ? (a - N) : (N - j);
printf("%d", tem);
return 0;
}
题目的思路很简单,一个数N肯定在两个斐波那契数之间,我们只要一直求斐波那契数,直到比他大的那一个数据出现,然后比较他跟较小的数还是较大的数大小即可
程序中使用了一个比较大小的三目操作符
数值1<数值2?数值1:数据2
也就是说数值1<数值2的话会返回:左边的值。