题目 1500: [蓝桥杯][算法提高VIP]分数统计 时间限制: 1Sec 内存限制: 128MB 提交: 1541 解决: 727
题目描述
给定一个百分制成绩T,将其划分为如下五个等级之一:
90100为A,8089为B,7079为C,6069为D,0~59为E
现有若干百分制成绩(成绩个数不超过1000个),请你统计五个等级段的人数,并找出人数最多的那个等级段,按照从大到小的顺序输出该段中所有人成绩(保证人数最多的等级只有一个)。
输入
第一行是成绩的个数 n
第二行是学生的成绩,若干0~100的正整数,用空格隔开
输出
第一行为5个正整数,分别表示A,B,C,D,E五个等级段的人数
第二行一个正整数,表示人数最多的等级段中人数
接下来一行若干个用空格隔开的正整数,表示人数最多的那个等级中所有人的分数,按从大到小的顺序输出。
样例输入
10
100 80 85 77 55 61 82 90 71 60
样例输出
2 3 2 2 1
3
85 82 80
#include<stdio.h>
#include<math.h>
#include<string.h>
int xb(int a,int b,int c,int d,int e)
{
int max=e;
if(a>max) max=a;
if(b>max) max=b;
if(c>max) max=c;
if(d>max) max=d;
return max;
}
void shuchu(int *sre,int cns)
{
for(int i=0;i<cns;i++)
{
for(int j=i+1;j<cns;j++)
{
if(sre[i]<sre[j]){
int t=sre[i];
sre[i]=sre[j];
sre[j]=t;
}
}
printf("%d ",sre[i]);
}
}
int main()
{
int n;
int str[1001]={0};
scanf("%d",&n);
int a,b,c,d,e;
a=b=c=d=e=0;
for(int i=1;i<=n;i++)
scanf("%d",&str[i]);
int sa[1000]={0},sb[1000]={0},sc[1000]={0},sd[1000]={0},se[1000]={0};
for(int i=1;i<=n;i++)
{
switch(str[i]/10)
{
case 10:
case 9:sa[a++]=str[i];break;
case 8:sb[b++]=str[i];break;
case 7:sc[c++]=str[i];break;
case 6:sd[d++]=str[i];break;
default:se[e++]=str[i];break;
}
}
printf("%d %d %d %d %d\n",a,b,c,d,e);
int zd=0;
zd=xb(a,b,c,d,e);
printf("%d\n",zd);
if(zd==a) shuchu(sa,a);
else if(zd==b) shuchu(sb,b);
else if(zd==c) shuchu(sc,c);
else if(zd==d) shuchu(sd,d);
else shuchu(se,e);
return 0;
}