题目

{% raw %}

点击显/隐题目
{% endraw %} 有一个分数序列:2/1,3/2,5/3,8/5……求出这个数列的前n项之和.

{% raw %}



{% endraw %}

行1:一个整数n,n∈[1,40]

{% raw %}



{% endraw %}

行1:累加和,精确到小数点后6位

{% raw %}





{% endraw %}

20

{% raw %}



{% endraw %}

32.660261

{% raw %}




{% endraw %}

题解

最后只需要保留6位小数,因此如果使用double即使运算40次误差也不会很大
因此可以直接用 double 存储每个加数,然后计算和

找到规律 新的分数的分子是上一个分子分母和,分母是上一个分子

直接模拟跑一下就行

代码

点击显/隐代码
```cpp 分数序列求和 https://github.com/OhYee/sourcecode/tree/master/ACM 代码备份 /*/ #define debug #include //*/ #include #include #include #include using namespace std;

int main(){
#ifdef debug
freopen("in.txt", "r", stdin);
int START = clock();
#endif
cin.tie(0);
cin.sync_with_stdio(false);

int n;
cin >> n;
double a=1.0,b=2.0;
double ans=0;
for(int i=0;i<n;i++){
    ans+=b/a;
    b = a + b;
    a = b - a;
}
cout << fixed << setprecision(6) << ans << endl;


#ifdef debug
printf("Time:%.3fs.\n", double(clock() - START) / CLOCKS_PER_SEC);
#endif
return 0;

}

</div>