【蓝桥杯2020省赛】【数学】成绩统计(详解)

题目

小蓝给学生们组织了一场考试,卷面总分为 100 分,每个学生的得分都是一个 0 到 100 的整数。

如果得分至少是 60 分,则称为及格。如果得分至少为 85 分,则称为优秀。

请计算及格率和优秀率,用百分数表示,百分号前的部分四舍五入保留整 数。

题目链接

成绩统计蓝桥云课是国内领先的IT在线编程及在线实训学习平台,专业导师提供精选的实践项目,创新的技术使得学习者无需配置繁琐的本地环境,随时在线流畅使用。以就业为导向, 提供编程、运维、测试、云计算、大数据、数据库等全面的IT技术动手实践环境, 提供Linux、Python、Java、C语言、Node.js、Hadoop、PHP、Docker、Git、 R、SQL、MongoDB、Redis、Swift、Spark等千门热门课程。https://www.lanqiao.cn/problems/502/learning/

输入描述

输入的第一行包含一个整数 n (1 ≤ n ≤ 10^4),表示考试人数。

接下来 n 行,每行包含一个 0 至 100 的整数,表示一个学生的得分。

输出描述

输出两行,每行一个百分数,分别表示及格率和优秀率。百分号前的部分 四舍五入保留整数。

测试样例

输入样例

7
80
92
56
74
88
100
0

输出样例

71%
43%

提交结果截图

详细分析

这是道简单题,只用得到及格人数和优秀人数,然后除以总人数再四舍五入求一个百分比即可。

及格人数和优秀人数可以边输入边累计

注意的是四舍五入计算的小技巧:

  1. 首先是除法运算结果要是小数,所以我对及格人数p、优秀人数q和总人数n都进行了一个double类型强制转换。
  2. 其次是四舍五入需要利用int类型强制转换将结果+0.5后向上取整(int类型强制转换),等同于四舍五入。这点可以参考我的另一篇博文:C/C++ 实现 a/b 向上取整和向下取整,其中a > 1, b > 1且 a、b均为整数_NOT_TODAY1的博客-CSDN博客一、向上取整由于a >1, b>1且a、b均为整数,故可以设 a = nb + m(其中,n为非负整数, 0<=m<=b-1)则, a/b = n + m/b(a + b - 1)/b = (nb + m + b - 1)/b = n + 1 + (m - 1)/b故int ((a + b - 1)/b) = int ((nb + m + b - 1)/b) = n + 1 + int ((m - 1)/b)下面通过讨论m的取值,证明a/b向上取整即为int ..https://blog.csdn.net/NOT_TODAY1/article/details/120424797

带详细注释的源代码

#include <iostream>
using namespace std;
int main()
{
  int n;//考试人数
  int tmp;//临时变量
  int p = 0, q = 0;//及格人数,优秀人数
  cin>>n;
  for(int i = 0; i < n; i++)
  {
    cin>>tmp;
    if(tmp >= 60)//如果及格
      p++;       //及格人数+1
    if(tmp >= 85)//如果优秀
      q++;       //优秀人数+1
  }
  //打印结果
  cout<<int(double(p)/double(n)*100+0.5)<<"%"<<endl<<int(double(q)/double(n)*100+0.5)<<"%"<<endl;
  return 0;
}

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值