QQ扫一扫联系
(烧作业)某课作业布置了N(3≤N≤10000)个题目,第i题对应的得分是a。作业的总
得分的计算方式为去掉作业中得分最小的一个题,剩下其它所有题目得分的平均值。但很不
幸小A遇到了一场火灾,前K(1<K<N-2)个题目被烧了,无法记录得分。小A想知道,K是多
少时,可以得到最高的作业得分?作业被烧了前K页,这时的得分是从第K+1页到最后一页
中,去除最小得分后取平均值。
输入第一行是整数N,第二行是n个不超过10000的非负整数表示a
输出一行,若干个整数表示答案。如果有多个K,请依次升序输出。
1 #include<cstdio> 2 #include<cmath> 3 #define min(a,b)(a<b?a:b) 4 #define MAXN 100002 5 using namespace std; 6 int n, k[MAXN], cnt=0; 7 int s[MAXN], minScore, sum; 8 double maxAverage=0,nowAverage; 9 int main() { 10 scanf("%d",&n); 11 for(inti=1;i<= n;i++) 12 scanf("%d",&s[i]); 13 minScore=s[n]; 14 ①; 15 for(inti=n-1;i>=2;i--) { 16 minScore=min(minScores[i]) 17 ②; 18 nowAverage=③; 19 if(nowAverage> maxAverage){ 20 ④ 21 maxAverage=nowAverage; 22 } else if(fabs(nowAverage-maxAverage)<1e-6) 23 ⑤; 24 } 25 for(int i=cnt; i >= 1; i--) 26 printf("%d\n",k[i]); 27 return 0; 28 }
1)①处应填( )
A.sum=n
B.sum=s[1]
C.sum=s[n]
D. sum=0
2)②处应填()
A.sum=maxAverage*(n-i)
B.sum+=s[i]
C.sum+=s[n-i]
D.sum=s[i]+minScore
3)③处应填( )
A.(double)(sum+minScore)/(n-i)
B.sum*1.0/(n-i)
C.(int)(sum-minScore)/(n-i)
D.(double)(sum-minScore)/(n-i)
4)④处应填( )
A.k[++cnt]=i;
B.k[cnt++]=i-1
C.cnt=1;k[cnt]=i-1;
D.cnt=0;k[cnt]=I;
5)⑤处应填( )
A. k[cnt++]=i;
B.k[++cnt]=i-1;
C. k[cnt++] =n-i;
D.k[cnt]=i;
第一空(3分):_____________
第二空(3分):_____________
第三空(3分):_____________
第四空(3分):_____________
第五空(3分):_____________