Sample Input:
4
0.1 0.2 0.3 0.4
Sample Output:
5.00
题解:
输入
0.1 | 0.2 | 0.3 | 0.4 |
---|
取i
从1开始,
对于输入的第i
个数,比如i=2
,包含第2
个数的组合从其两侧考虑,
对于0.2
,左边可以为0
,可以为 0.1
,有i==2
个可能
其右边可以为 0.3、0.4、0
,有n-i+1
总可能
那么有i*(n-i+1)
包含0.2
的情况,让 ans += 0.2 * i * (n-i+1)
由于double
对于大规模运算会有精度问题,就先转换为整数运算,最后以小数输出结果
#include <iostream>
#include <vector>
using namespace std;
int n;
vector<long> temp;
long long ans;
int main(){
cin >> n;
temp.resize(n+1);
double t;
for(int i=1;i<=n;i++){
scanf_s("%lf",&t);
ans += (long long)(t*1000) * i *(n-i+1);
}
printf("%.2f",ans / 1000.0);
system("pause");
return 0;
}