2018年CSP-X复赛真题及题解(T3:统计成绩)

2018年CSP-X复赛真题及题解(T3:统计成绩)

题目描述

考试结束之后,每位同学都依据成绩获得相应的等级:

  • 优秀: 90 ∼ 100 90\sim 100 90∼100;
  • 良好: 80 ∼ 89 80\sim 89 80∼89;
  • 及格: 60 ∼ 79 60\sim79 60∼79;
  • 不及格: 60 60 60 以下。

现在,需要统计一下获得每个等级的人数分别是多少。

输入格式

第一行,一个正整数 n n n,表示总人数。

第二行, n n n 个由空格隔开的整数,表示每个同学的成绩( 0 ∼ 100 0\sim100 0∼100)。

输出格式

共四行,每行一个整数,依次表示获得优秀、良好、及格、不及格等级的人数。

输入输出样例 1
输入 1
复制代码
10 
93 33 86 81 47 82 84 92 73 94 
输出 1
复制代码
3
4
1
2
说明/提示

对于 100 % 100\% 100% 的数据,满足 1 ≤ n ≤ 10 5 1\leq n\leq 10^5 1≤n≤105,每位同学的分数在 0 ∼ 100 0\sim 100 0∼100 之间。

思路分析

题目要求统计四个分数段(优秀、良好、及格、不及格)的人数。

  • 输入总人数 n,然后依次读取每个分数。
  • 使用四个计数器分别记录四个等级的人数。
  • 对于每个分数,按以下条件判断:
    • 若分数在 90~100,优秀计数器加 1;
    • 否则若在 80~89,良好计数器加 1;
    • 否则若在 60~79,及格计数器加 1;
    • 否则(0~59)不及格计数器加 1。
  • 最后按顺序输出四个计数器的值。

时间复杂度 O(n),空间复杂度 O(1),满足 n ≤ 10⁵ 的要求。


代码实现

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int n;
int main(){
    cin>>n;
    
    int a=0,b=0,c=0,d=0;//分别统计优秀、良好、及格、不及格人数
    
    for(int i=1;i<=n;i++){//循环读入每个分数
        int s;//当前分数
        cin>>s;//输入分数
        if(s>=90) a++;//优秀
        else if(s>=80) b++;//良好
        else if(s>=60) c++;//及格
        else d++;//不及格
    }
    cout<<a<<"\n"<<b<<"\n"<<c<<"\n"<<d;//按顺序输出四个等级人数
    return 0;
}

功能分析

  • 输入处理 :先读入人数 n,然后通过 for 循环依次读入 n 个成绩。
  • 等级分类 :利用 if-else if 结构,根据分数区间累加对应的计数器。由于 else if 的顺序性,s>=90 优先判断优秀,之后 s>=80 排除掉 90 以上,以此类推,最终覆盖所有 0~100 的整数。
  • 输出结果:按题目要求的四行顺序输出优秀、良好、及格、不及格人数,每个数字占一行。

更多内容请关注专栏:信奥赛C++普及组csp-j初赛&复赛真题题解(持续更新): https://blog.csdn.net/weixin_66461496/category_12808781.html 点击跳转


【秘籍汇总】(完整csp信奥赛C++学习资料):

1、csp/信奥赛C++,完整信奥赛系列课程(永久学习):

https://edu.csdn.net/lecturer/7901 点击跳转

2、CSP信奥赛C++竞赛拿奖视频课:

https://edu.csdn.net/course/detail/40437 点击跳转

https://edu.csdn.net/course/detail/41081 点击跳转

3、csp信奥赛高频考点知识详解及案例实践:

CSP信奥赛C++动态规划:

https://blog.csdn.net/weixin_66461496/category_13096895.html点击跳转

CSP信奥赛C++标准模板库STL:

https://blog.csdn.net/weixin_66461496/category_13108077.html 点击跳转

信奥赛C++提高组csp-s知识详解及案例实践:

https://blog.csdn.net/weixin_66461496/category_13113932.html 点击跳转

4、csp信奥赛冲刺一等奖有效刷题题解:

信奥赛C++普及组CSP-J一等奖通关刷题题单及题解:

https://blog.csdn.net/weixin_66461496/category_12673810.html 点击跳转

信奥赛C++普及组csp-j初赛&复赛真题题解(持续更新): https://blog.csdn.net/weixin_66461496/category_12808781.html 点击跳转

信奥赛C++提高组csp-s初赛&复赛真题题解(持续更新):

https://blog.csdn.net/weixin_66461496/category_13125089.html 点击跳转

5、GESP C++考级真题题解:

GESP(C++ 一级+二级+三级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12858102.html 点击跳转

GESP(C++ 四级+五级+六级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12869848.html 点击跳转

GESP(C++ 七级+八级)真题题解(持续更新):

https://blog.csdn.net/weixin_66461496/category_13117178.html 点击跳转

· 文末祝福 ·

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int main(){
	cout<<"跟着王老师一起学习信奥赛C++";
	cout<<"    成就更好的自己!       ";
	cout<<"  csp信奥赛一等奖属于你!   ";
	return 0;
}