题目描述:
Fibonacci数列就形如:0, 1, 1, 2, 3, 5, 8, 13, ...,在Fibonacci数列中的数我们称为Fibonacci数。给你一 个N,你想让其变为一个Fibonacci数,每一步你可以把当前数字X变为X-1或者X+1,现在给你一个数N(0<=N<1000000)求最少需要多少步可以变为Fibonacci数。
示例:输入 15 输出 2
思路;先循环出斐波那契数列,然后找到这个整数N离得最近的两个斐波那契的位置,最后打印它离哪个位置最小.
代码如下:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include<assert.h>
int mine(int x, int y) {
return x < y ? x : y;
}
int main() {
int F[1000];
int N;
int tmp = 0;
F[0] = 0;
F[1] = 1;
for (int i = 2; i < 1000; i++) {
F[i] = F[i - 1] + F[i - 2];
}
scanf("%d", &N);
for (i = 0; i < 1000; i++) {
if ((N >= F[i]) && (N <= F[i + 1])) {
tmp = i;
break;
}
continue;
}
printf("%d\n", mine(N - F[tmp], F[tmp + 1] - N));
system("pause");
return 0;
}
这里因为F[1000]远远大于1000000,所以程序不会出错;