分析问题
我们需要判断学生的分数是否符合学校的“正态分布”要求。具体要求是优秀(≥90分)的学生不超过30%,挂科(<60分)的学生不超过10%。步骤如下:
- 输入学生人数和他们的分数。
- 统计优秀和挂科的学生人数。
- 检查优秀人数是否超过30%,挂科人数是否超过10%。
- 输出结果。
建立模型
- 输入处理:读取学生人数和对应的分数。
- 统计人数:遍历所有分数,统计优秀和挂科的学生数量。
- 条件判断:判断优秀人数是否超过总人数的30%,挂科人数是否超过总人数的10%。若任意条件不满足,则输出“NO”;否则输出“YES”。
编写C++代码
#include <bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
int score,excellent = 0, fail = 0;//excellent 优秀 fail 不及格
for(int i=1;i<=n;i++){
cin>>score;
if(excellent>=90){
you++;
}
if(score<60){
fail++;
}
}
if(excellent*1.0/n<=0.3 && fail*1.0/n<=0.1) cout<<"YES";
else cout<<"NO";
return 0;
}
代码解释
- 输入处理:首先读取学生人数
n,然后逐个读取每个学生的分数。 - 统计优秀和挂科人数:遍历每个分数,若分数≥90,优秀计数增加;若分数<60,挂科计数增加。
- 条件判断:计算允许的优秀和挂科人数的上限,并比较实际人数是否超过这些上限。若任一条件不满足,输出“NO”,否则输出“YES”。
此代码确保严格遵循题目要求,正确处理所有可能的输入情况,包括浮点数比较时的精度问题。