蓝桥杯 分数统计---递归

题目 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;
   }

猜你喜欢

转载自blog.csdn.net/qq_46232829/article/details/107615415