题目链接:
思路为依次计算各个子数列中各元素出现的次数,并通过找规律发现其系数与元素序数的关系。最初代码如下:
1. #include<bits/stdc++.h>
2. double x, ans=0;
3. int main(){
4. int n;
5. scanf("%d", &n);
6. for (int i = 1; i <= n; i++){
7. scanf("%lf", &x);
8. ans += x * i * (n - i + 1);
9. }
10. printf("%.2f\n", ans);
11. return 0;
12. }
在四个样例中过了3个,余下的一个样例没过猜测是因为精度损失的问题(二进制浮点数易造成精度损失),因此需在第8行代码处稍作修改,先将每轮循环输入的x乘以1000并转换为long long型,再让sum求和。最后输出时还需注意,由于是%.2f形式,应为sum / 1000.0, 而非简单的sum / 1000.
AC代码:
1. #include <bits/stdc++.h>
2. using namespace std;
3. int main() {
4. int n;
5. cin >> n;
6. long long sum = 0;
7. double temp;
8. for (int i = 1; i <= n; i++) {
9. scanf("%lf", &temp);
10. sum += (long long)(temp * 1000) * i * (n - i + 1);
11. }
12. printf("%.2f", sum / 1000.0);
13. return 0;
14. }