题目
{% 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 %}
题解
最后只需要保留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>