版本一:超时,最后两个测试点过不了,双循环复杂度太大。
#include <iostream>
#include <vector>
using namespace std;
int main(){
int n;
cin >> n;
vector<double> v(n+1);
double sum = 0.0;
for (int i=1;i<=n;i++){
cin >> v[i];
}
for (int i=1;i<=n;i++){
for (int j=n;j>=1;j--){
if (i+j==n+1)
sum += i*j*v[i];
}
}
printf("%.2f",sum);
return 0;
}
改进后:
#include <iostream>
using namespace std;
int main()
{
int n;
cin >> n;
double v[100005],sum = 0.0;
for (int i=1;i<=n;i++) cin >> v[i];
for (int i=1;i<=n;i++)
{
//sum += (i*(n+1-i)*v[i]);浮点数精度的问题
sum += (v[i]*(n-i+1)*i);
}
printf("%.2f",sum);
return 0;
}
分析:这道题太他么坑了,折磨人,浮点数位置不对导致精度丢失,计算机组成成原理学过竟然忘记了,太坑了
可以参考[https://www.cnblogs.com/huipengly/p/8423316.html](https://www.cnblogs.com/huipengly/p/8423316.html)
1049 数列的片段和 (20分)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 给定一个正数数列,我们可以从中截取任意的连续的几个数,称为片段。例如,给定数列{ 0.1, 0.2, 0.3, 0...
- 给定一个正数数列,我们可以从中截取任意的连续的几个数,称为片段。例如,给定数列 { 0.1, 0.2, 0.3, ...
- 【蝴蝶效应】 蝴蝶效应:上个世纪70年代,美国一个名叫洛伦兹的气象学家在解释空气系统理论时说,亚马逊雨林一只蝴蝶...