首先,直接暴力算法,但是最后两个测试点超时了
#include <stdio.h>
//int main(){
// int n,i,j,k=0,num;
// scanf("%d",&n);
// double a[n];
// double count = 0;
// for(i=0;i<n;i++){
// scanf("%lf",&a[i]);
// }
// for(i=0;i<n;i++){
// num = i;
// while(num<n){
// for(k=i;k<=num;k++){
// count += a[k];
// }
// num++;
// }
// }
// printf("%.2f",count);
//}
其实这道题有很明显的规律,看出规律来就好办了,但是有一个天坑的地方!!!!
首先硬来的话最后两个测试点时间超时,所以来归纳一下,能发现还是很有规律可循的
我们发现第一个数字刚好出现了n次,第二个数字出现了(n-1)2次,第三个数字出现了
2(n-1)次,第四个数字出现了n次,然后我们来观察,刚好是 14, 32 , 23, 41
所以规律出来了即每一个数字出现的次数为(n-i)*(i+1) 求值的和,再乘上ch即可,
天坑来了:!!!!! ch一定一套乘在前面,乘在后面最后两个测试点就是错了,我也不知道为什么!
#include <stdio.h>
int main(){
int n,i;
scanf("%d",&n);
double count = 0,ch;
for(i=0;i<n;i++){
scanf("%lf",&ch);
count += ch*(n-i)*(i+1); //真的坑,ch要乘在前面,乘在后面最后两个测试点就是错了,我服了!
}
printf("%.2f",count);
}