题解
考试分数统计
1 条题解
-
0
P4361 考试分数统计(【入门】)
解题思路
题目要统计两拨人:分数低于 的人,和分数高于 的人。这是两个独立的统计,一个学生可能同时属于两拨(比如分数恰好既低于 p 又高于 q,不过通常 时不会发生)。所以两个条件要分开判断,互不影响。
用两个计数器
lo和hi,读入每个学生的分数 后:- 如果 ,
lo加 1; - 如果 ,
hi加 1。
两个判断是并列的
if,不是else if,因为一个分数可能同时触发两个条件,用 else 会把第二个条件吞掉。拿样例来说,,,五个分数 260、300、190、290、280:
- 低于 200 的只有 190,
lo=1; - 高于 260 的有 300、290、280,
hi=3。 输出1 3,和样例一致。
边界情况:分数正好等于 不算低于 ,正好等于 不算高于 ,判断时别把等于的情况算进去。分数范围 1~500,人数最多 100,数据很小。
参考代码
// 统计低于p分和高于q分的学生人数 #include <iostream> using namespace std; int main() { int n, p, q; cin >> n >> p >> q; int lo = 0, hi = 0; // lo:低于p的人数, hi:高于q的人数 for (int i = 0; i < n; i++) { int s; cin >> s; if (s < p) lo++; if (s > q) hi++; } cout << lo << " " << hi << endl; return 0; }复杂度分析
每个学生处理一次,一共 个学生,所以时间复杂度是 ( 最大 100)。只用了几个整数计数器,没有用数组,额外空间复杂度是 。
- 如果 ,
- 1