题目
小蓝给学生们组织了一场考试,卷面总分为 100 分,每个学生的得分都是一个 0 到 100 的整数。
如果得分至少是 60 分,则称为及格。如果得分至少为 85 分,则称为优秀。
请计算及格率和优秀率,用百分数表示,百分号前的部分四舍五入保留整 数。
题目链接
输入描述
输入的第一行包含一个整数 n (1 ≤ n ≤ 10^4),表示考试人数。
接下来 n 行,每行包含一个 0 至 100 的整数,表示一个学生的得分。
输出描述
输出两行,每行一个百分数,分别表示及格率和优秀率。百分号前的部分 四舍五入保留整数。
测试样例
输入样例
7
80
92
56
74
88
100
0
输出样例
71%
43%
提交结果截图
详细分析
这是道简单题,只用得到及格人数和优秀人数,然后除以总人数再四舍五入求一个百分比即可。
及格人数和优秀人数可以边输入边累计。
要注意的是四舍五入计算的小技巧:
- 首先是除法运算结果要是小数,所以我对及格人数p、优秀人数q和总人数n都进行了一个double类型强制转换。
- 其次是四舍五入需要利用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;
}