四年级二班女同学在体育课上进行了一轮仰卧起坐测试。成绩计算表如下。
一分钟内做仰卧起坐的个数
成绩
<20个
F
20~29个
E
30~39个
D
40~49个
C
50~59个
B
>=60个
A
请从键盘读入n位同学的在一分钟内做仰卧起坐的数量,计算出每个成绩区间的人数,按照人数降序排序,如果有多个成绩区间人数一样多,那么先输出成绩较好的区间。(4.1.44)
输入
第一是一个整数n代表同学的人数(n<=100),第二行是n个同学一分钟完成仰卧起坐的数量。
输出
输出 6行为6个成绩区间的人数,每行按照“成绩:人数”的格式输出,按照人数降序输出。
样例
输入
10 19 18 17 20 21 28 30 45 48 51
输出
E:3 F:3 C:2 B:1 D:1 A:0
#include<bits/stdc++.h>
using namespace std;
int n,a[105],x,b[105];
int main(){
cin>>n;
for(int i=0; i<n; i++)
{
cin>>x;
if(x>=60)a[65]++;
if(x>=50&&x<=59)a[66]++;
if(x>=40&&x<=49)a[67]++;
if(x>=30&&x<=39)a[68]++;
if(x>=20&&x<=29)a[69]++;
if(x<20)a[70]++;
//用数组每个记录等级的人数
}
b[70]=70,b[69]=69,b[68]=68,b[67]=67,b[66]=66,b[65]=65;//等级的初始化
for(int i=65; i<=70; i++)
{
for(int k=i+1; k<=70; k++)
{
if(a[i]<a[k])//从小到大排序,这里采用冒泡/选择排序会比较好搞一点
{
swap(a[i],a[k]);//人数的交换
swap(b[i],b[k]);//等级的交换
}
if(a[i]==a[k])//因为有人数相同的情况
{
if(b[i]>b[k])//因为b数组就是A-F的ascll码,就可以直接判断
{
swap(a[i],a[k]);
swap(b[i],b[k]);
}
}
}
}
for(int i=65; i<=70; i++)
cout<<char(b[i])<<":"<<a[i]<<endl;//"cout<<char(b[i]);"就是把b[i]强制转换成字符等级,然后输出人数
return 0;
}
记得点赞关注收藏哦~
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/LAN_CIKR/article/details/121879482