题解 | Fibonacci数列
Fibonacci数列
https://www.nowcoder.com/practice/18ecd0ecf5ef4fe9ba3f17f8d00d2d66
解法:我们可以一边求斐波那契数组一边找离n最近的两个斐波那契数。
求斐波那契数我们可以借助三个变量来求,a、b、c。初始化 a = 0, b = 0, c = 1。接着每次将b给a,c给b,c在等于a+b即可。
我们要求离n最近的两个斐波那契数,可以用c来比较,如果n>c的话,就继续求,如果n<=c,说明n现在就在b和c之间,求最少的变化次数,我们只需要求n和b/c的差值即可。返回最小值即可。
#include <iostream> using namespace std; int main() { int n = 0; cin >> n; int a = 0, b = 1, c = 1; while(n > c) { a = b; b = c; c = a + b; } cout << (c-n > n-b? n-b : c-n) << endl; return 0; }