1049 数列的片段和 (20分)

版本一:超时,最后两个测试点过不了,双循环复杂度太大。
#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)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容