#12356. 珅泽教育CSP-J第一轮模拟考第二十六套 第 40 题

珅泽教育CSP-J第一轮模拟考第二十六套 第 40 题

三、完善程序(单项选择题,每小题 3 分,共 30 分)

程序(2)

(烧作业)某课外作业布置了 N(3≤N≤100000)个题目,第 i 题得分为 aᵢ。作业总分为去掉得分最小的一题后,其余题目得分的平均值。前 K(1≤K≤N-2)题被烧毁后,只对第 K+1 题到最后一题按上述规则计分。求能取得最高得分的所有 K,并按升序输出。输入各题得分均为不超过 10000 的非负整数。

#include <cstdio>
#include <cmath>
#define min(a,b) (a<b?a:b)
#define MAXN 100002
using namespace std;
int n, k[MAXN], cnt = 0;
int s[MAXN], minScore, sum;
double maxAverage = 0, nowAverage;
int main() {
    scanf("%d", &n);
    for (int i = 1; i <= n; i++)
        scanf("%d", &s[i]);
    minScore = s[n];
    ①;
    for (int i = n - 1; i >= 2; i--) {
        minScore = min(minScore, s[i]);
        ②;
        nowAverage = ③;
        if (nowAverage > maxAverage) {
            ④
            maxAverage = nowAverage;
        } else if (fabs(nowAverage - maxAverage) < 1e-6)
            ⑤;
    }
    for (int i = cnt; i >= 1; i--)
        printf("%d\n", k[i]);
    return 0;
}
  1. ②处应填( )。

{{ select(1) }}

  • sum = maxAverage * (n-i)
  • sum += s[i]
  • sum += s[n-i]
  • sum = s[i] + minScore