题目 2311: [蓝桥杯][2019年第十届真题]Fibonacci 数列与黄金分割
时间限制: 1Sec 内存限制: 128MB 提交: 2182 解决: 578
题目描述
Fibonacci 数列是非常著名的数列:
F[1] = 1,
F[2] = 1,
对于 i > 3,F[i] = F[i − 1] + F[i − 2]
Fibonacci 数列有一个特殊的性质,前一项与后一项的比值,F[i]/F[i + 1], 会趋近于黄金分割。
为了验证这一性质,给定正整数 N,请你计算 F[N]/F[N + 1],并保留 8 位 小数。
输入
一个正整数 N。(1 ≤ N ≤ 2000000000)
输出
F[N]/F[N + 1]。答案保留 8 位小数。
样例输入
2样例输出
0.50000000
题目解析
1. 运行超时 73分
#include <iostream>
using namespace std;
int main(int argc, char** argv) {
int n;
cin >> n;
double a = 1, b = 1, c;
for(int i = 0; i < n-2 + 1; i++){
c = a + b;
a = b;
b = c;
}
double res = a/b;
printf("%.8f", res);
return 0;
}
2. 正确 100分
其实相比于第一个代码段,只增加了一个判断,当n > 20 时输出为固定值
#include <iostream>
using namespace std;
int main(int argc, char** argv) {
int n;
cin >> n;
if(n < 20){
double a = 1, b = 1, c;
for(int i = 0; i < n-2 + 1; i++){
c = a + b;
a = b;
b = c;
}
double res = a/b;
printf("%.8f", res);
}else{
cout << "0.61803399" << endl;
}
return 0;
}
从下面图可以看出,当i 在18之后就已经趋于固定值了。那么这个题意当中提到了黄金分割,由此可以想到当n 趋于一个很大的值时,黄金分割比的前多少位肯定是固定的。
(虽然一开始我也没想到是这样。。。不过也算是积累经验了)