题解
查询分数3
1 条题解
-
0
解题思路
题目分三步走:
- 读入并求和:读入 n 和 n 个成绩,一边读一边累加得到总分 sum;
- 算平均分:平均分 = 总分 ÷ 人数,也就是 sum / n。因为题目要求只保留整数,直接用整数除法就可以了(C++ 里两个整数相除会自动去掉小数部分);
- 找超过平均分的学生:再遍历一遍,谁的分数 > 平均分,就输出它的学号(学号从 1 开始)。
输出学号时要注意空格:多个学号之间用空格隔开,但开头不能有空格、结尾也不能多一个空格。我们用 first 这个标志记录“是不是第一个要输出的学号”,第一个前面不加空格,后面的每个学号前面加一个空格。
参考代码
// P4449 查询分数3:算平均分,再输出超过平均分的学生学号 #include <iostream> using namespace std; int main() { int n; cin >> n; // 学生人数 int a[105]; int sum = 0; for (int i = 1; i <= n; i++) { cin >> a[i]; // 读入每个学生的成绩,学号 i 从 1 开始 sum += a[i]; // 累加总分 } int avg = sum / n; // 平均分 = 总分 / 人数,只保留整数部分 cout << avg << endl; // 依次检查每个学生,分数大于平均分就输出学号 bool first = true; // 控制空格:第一个数前不加空格 for (int i = 1; i <= n; i++) { if (a[i] > avg) { if (!first) cout << " "; cout << i; first = false; } } cout << endl; return 0; }复杂度分析
设有 n 名学生。
- 时间:第一遍读入并求和,第二遍找超过平均分的学生,共两遍循环,时间复杂度是 O(n)。
- 空间:需要一个能装 n 个成绩的数组,空间复杂度是 O(n)。
- 1