zoukankan      html  css  js  c++  java
  • PTA 乙级 1049 数列的片段和 (20分) C/C++ (更新OJ导致测试点2无法通过,已解决)

     还是想了第一版的做法,暴力算法,超时了

     1 #include<iostream>
     2 #include<vector>
     3 
     4 using namespace std;
     5 
     6 int main() {
     7     double n = 0;
     8     double sum = 0.0;
     9     cin >> n;
    10     vector<double> arr(n);
    11     for (int i = 0; i < n; ++i) cin >> arr[i];
    12     for (int i = 0; i < n; ++i) {                //从头开始,n层
    13         for (int j = i; j < n; ++j) {            //每层有多少个数列
    14             for (int k = i; k <= j; k++) {        //每个数列做累加
    15                 sum += arr[k];
    16             }
    17         }
    18     }
    19     printf("%.2f", sum);
    20     return 0;
    21 }

     是的,不能遍历每一个数做累加了

    然后找到了规律,通过n的大小,找到每个元素出现的次数即可

     1 #include<iostream>
     2 #include<vector>
     3 
     4 using namespace std;
     5 
     6 int main() {
     7     int n = 0;
     8     cin >> n;
     9     double num = 0.0, sum = 0.0;
    10     for (int i = 1; i <= n; ++i) {
    11         cin >> num;
    12         sum += num * (n - i + 1) * i;
    13     }
    14     printf("%.2f", sum);
    15     return 0;
    16 }

    但还是出问题了,测试点2无法通过

     怎么也找不出原因,从网上找答案,发现大部分的做法和我的差不多

    后来发现是PTA更新了OJ系统,用double进行大量数据计算会导致精度损失,测试点2,正是105的情况,得将sum转换为long long且扩大1000倍,来多保存小数点后的位数(仅仅是多精确了三位就能AC了。。。,感觉后续还会改OJ的)

    感谢两位博主

    柳婼

    Ruihan's Blog

     1 #include<iostream>
     2 
     3 using namespace std;
     4 
     5 int main() {
     6     int n = 0;
     7     cin >> n;
     8     double num = 0.0;
     9     long long sum = 0;
    10     for (int i = 1; i <= n; ++i) {
    11         cin >> num;
    12         sum += (long long)(num * 1000) * (n - i + 1) * i;
    13     }
    14     printf("%.2f", sum / 1000.0);    
    15     return 0;
    16 }

  • 相关阅读:
    头插法建立单链表
    顺序表
    栈的顺序存储实现
    折半查找
    myeclipe 快捷键盘
    ztree redio单选按钮
    webuploader上传进度条 上传删除
    svn乱码解决办法
    异构SOA系统架构之Asp.net实现(兼容dubbo)
    RPC框架
  • 原文地址:https://www.cnblogs.com/SCP-514/p/13479441.html
Copyright © 2011-2022 走看看