题目:https://pintia.cn/problem-sets/994805260223102976/problems/994805275792359424

代码

一开始的写法

如下,很简单的遍历,但是只过了两个点,会超时

  1. #include<vector>
  2. #include<algorithm>
  3. #include<iostream>
  4. using namespace std;
  5. int main(){
  6. int n;
  7. double result = 0, sum = 0;
  8. scanf("%d",&n);
  9. vector<double> list(n);
  10. for(int i = 0; i < n; i++) scanf("%lf",&list[i]);
  11. for(int i = 0; i < n; i++){
  12. sum = 0;
  13. for(int j = i; j < n; j++){
  14. sum += list[j];
  15. result += sum;
  16. }
  17. }
  18. printf("%.2f",result);
  19. }

正确写法

规律是每个数字出现的次数为

i * (n - i + 1)

  1. #include<iostream>
  2. using namespace std;
  3. int main(){
  4. int n;
  5. double result = 0, input;
  6. scanf("%d",&n);
  7. for(int i = 1; i <= n; i++){
  8. scanf("%lf",&input);
  9. result += input * i * (n + 1 - i);
  10. }
  11. printf("%.2f",result);
  12. }