解题思路:

  1. 定义  int s[1000],m[5]={0},t,p[5][1000],a[5]={0}; //a[]为p[ ][a]]的位置,用数组m[ ]每个等级的统计个数

  2. 输入

  3. 对每个等级统计个数并保存到另一个数组,把个数统计到m[]数组

  4. 找出个数最多的数组m[max]

  5. 排序

  6. 输出




注意事项:

参考代码:

#include <stdio.h>
void px(int a[],int x)
{
 int i,j,max,t;
 for(i=0;i<x;i++)
 {
  max=i;
  for(j=i;j<x;j++)
   if(a[j]>a[max])
    max=j;
  t=a[max];a[max]=a[i];a[i]=t;

 }
}
int main()

 int s[1000],m[5]={0},t,p[5][1000],a[5]={0};//a[]为p[][a]]的位置,m[]每个等级的统计个数
 int n,j,i,max;//max找出个数最多的数组m[]的位置
 scanf("%d",&n);//输入
 for(j=0;j<n;j++)
  scanf("%d",&s[j]);
 for(i=0,j=0;i<n;i++)
 {
  if(s[i]>=90 && s[i]<=100)//统计
   {
    m[0]++;//统计个数
    p[0][a[0]]=s[i];//用数组p[][a]]保存
    a[0]++;//数组a[0]改变p[][a]]的位置
     }
  else if(s[i]>=80 && s[i]<=89)
   {
    m[1]++;
    p[1][a[1]]=s[i];
    a[1]++;

  }
  else if(s[i]>=70 && s[i]<=79)
   {
    m[2]++;
    p[2][a[2]]=s[i];
    a[2]++;
  }
  else if(s[i]>=60 && s[i]<=69)
   {
    m[3]++;
    p[3][a[3]]=s[i];
    a[3]++;
  }
  else if(s[i]>=0 && s[i]<=59)
   {
    m[4]++;
    p[4][a[4]]=s[i];
    a[4]++;

  }
  else
   ;
 }
 max=0;
 for(i=1;i<5;i++)//找出个数最多的等级的位置
  if(m[max]<m[i])
  {
    max=i;
  }
 printf("%d %d %d %d %d\n",m[0],m[1],m[2],m[3],m[4]);
 printf("%d\n",m[max]);
 px(p[max],m[max]);//对等级最多的位置进行排序
    for(i=0;i<m[max];i++)//输出
    printf("%d ",p[max][i]);
 
}


点赞(1)
 

0.0分

5 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论