这个题目我解法的亮点在于  用了两个结构体 
可以节省一定的代码
具体的解体方法和步骤  写在下面了
个人 水平有限  欢迎批评指正!!
#include<iostream>
#include<algorithm>
using namespace std;
struct T
{
  int grade;
  char flag;	
}a[1005];//记录学生的成绩
struct TT
{
	int num;
	char flag;
}b[10];
bool cmp(TT c,TT d)//排序条件
{
	return  c.num<d.num;
}
int c[1006];
int main()
{
	//freopen("data.in.txt","r",stdin);
	//freopen("data.out.txt","w",stdout);
	int n;
	cin>>n;//成绩个数
	int Anum=0,Bnum=0,Cnum=0,Dnum=0,Enum=0; //记录每个成绩段的人数
	for(int i=0;i<n;i++)
	{
		cin>>a[i].grade;//输入成绩
	}
	for(int i=0;i<n;i++)//记录每个成绩段的人数
	{
		if(a[i].grade >=90&&a[i].grade <=100)
		{
		      Anum++;
		      a[i].flag='A';//给每个学生的成绩打上标记
		}
		if(a[i].grade >=80&&a[i].grade <=89)
		{
			   Bnum++;
			   a[i].flag='B';
		}
		if(a[i].grade >=70&&a[i].grade <=79)
		{
		      Cnum++;
		      a[i].flag='C';
		}
		if(a[i].grade >=60&&a[i].grade <=69)
		{
		       Dnum++;
		       a[i].flag='D';
		}
		if(a[i].grade <=59)
		{
		     Enum++;
			 a[i].flag='E';
		}
	} 
	int j=0;
	//将Anum,Bnum等数据输入到数组之中 好进行排序  同时也包括成绩的标记
	b[0].num=Anum;b[0].flag='A'; 
	b[1].num=Bnum;b[1].flag='B';
	b[2].num=Cnum;b[2].flag='C';
	b[3].num=Dnum;b[3].flag='D';
	b[4].num=Enum;b[4].flag='E';
	cout<<b[0].num<<" "<<b[1].num <<" "<<b[2].num <<" "<<b[3].num <<" "<<b[4].num <<endl;
	sort(b,b+5,cmp);//找出人数最多的那个成绩段
	cout<<b[4].num <<endl;
	for(int i=0;i<n;i++)
	{
		if(a[i].flag==b[4].flag)//如果学生在这个成绩段 
		{
			c[j++]=a[i].grade;//把学生的成绩输入到数组c中
		}
	}
	sort(c,c+j);将学生的成绩排序之后输出
	for(int i=j-1;i>=0;i--)
	{
		cout<<c[i]<<" ";
	}
}


点赞(7)
 

0.0分

0 人评分

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

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

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

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

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

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

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

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

评论列表 共有 0 条评论

暂无评论