题目:给你一个N,想让其变成一个Ficonacci数,每一步可以进行+1,-1 *** 作,求最少需要多少步可以变为Ficonacci数?
首先要实现这个题目,就先要实现斐波那契数列的函数和判断一个数是否为斐波那契数的函数。我们都知道斐波那契数列如何实现,在此也不做赘述。
如何判断一个数是否为斐波那契数呢?如果一个数是斐波那契数,直接返回1判断他是;如果他不是,那么我们知道他肯定会夹在两个斐波那契数之间,我们只需要利用这点就可以轻松解决。
#define _CRT_SECURE_NO_WARNINGS 1 #includeint Fib(int x)//斐波那契函数 { if (x == 1) return 0; else if (x == 2) return 1; else { int a = 0; int b = 1; int m = 0; for (int i = x - 2; i > 0; i--) { m = a + b; a = b; b = m; } return m; } } int IsFib(int x) { for (int i = 1; Fib(i) < x; i++) { if (Fib(i + 1) == x) return 1; } return 0; } int main() { int n = 0; scanf("%d", &n); int m = n; int count1 = 0, count2 = 0; while (IsFib(m) != 1) { m++; count1++; } //此循环判断加的步长 m = n; while (IsFib(m) != 1) { m--; count2++; } //此循环判断减的步长 printf("%d", (count1 > count2 ? count2 : count1)); return 0; }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)