B2069 求分数序列和
观察题面,公式中分子分母都是斐波那契数列。
分母为第 $n+1$ 项,分子为第 $n+2$ 项。
斐波那契数列:每一项=前两项的和。
即 $f[i]=f[i-1]+f[i-2]$,考虑打表。
我们就可以得到总共要打到第 $32$ 项,打表程序:
#include <iostream>
#include <cstdio>
using namespace std;
long long f[31], n, a;
int main()
{
freopen("biao.txt", "w", stdout);
f[1] = f[2] = 1;cout << "1, 1, "; //初始状态
for(int i = 3;i <= 32;++i)
f[i] = f[i - 1] + f[i - 2], cout << f[i] << ", "; //公式
fclose(stdout);
return 0;
}
从而就有:
#include <iostream>
#include <cstdio>
using namespace std;
double s;int n, f[] = {1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025, 121393, 196418, 317811, 514229, 832040, 1346269, 2178309};
int main()
{
cin >> n;
for(int i = 0;i < n;++i)
s += 1.0 * f[i + 2] / f[i + 1]; //分母为第 n+1 项,分子为第 n+2 项
printf("%.4lf", s);
return 0;
}