题目:https://pintia.cn/problem-sets/994805260223102976/problems/994805275792359424
代码
一开始的写法
如下,很简单的遍历,但是只过了两个点,会超时
#include<vector>#include<algorithm>#include<iostream>using namespace std;int main(){int n;double result = 0, sum = 0;scanf("%d",&n);vector<double> list(n);for(int i = 0; i < n; i++) scanf("%lf",&list[i]);for(int i = 0; i < n; i++){sum = 0;for(int j = i; j < n; j++){sum += list[j];result += sum;}}printf("%.2f",result);}
正确写法
规律是每个数字出现的次数为
i * (n - i + 1)
#include<iostream>using namespace std;int main(){int n;double result = 0, input;scanf("%d",&n);for(int i = 1; i <= n; i++){scanf("%lf",&input);result += input * i * (n + 1 - i);}printf("%.2f",result);}
