这个题目我解法的亮点在于 用了两个结构体 可以节省一定的代码 具体的解体方法和步骤 写在下面了 个人 水平有限 欢迎批评指正!!
#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]<<" "; } }
0.0分
0 人评分
【亲和数】 (C语言代码)浏览:908 |
C语言程序设计教程(第三版)课后习题5.6 (C语言代码)浏览:909 |
C语言程序设计教程(第三版)课后习题1.5 (C++代码)浏览:1114 |
WU-C语言程序设计教程(第三版)课后习题11.11 (C++代码)(想学链表的可以看看)浏览:1464 |
WU-C语言程序设计教程(第三版)课后习题12.1 (C++代码)浏览:1024 |
【求[X,Y]内被除3余1并且被除5余3的整数的和】 (C语言代码)浏览:703 |
1009题解浏览:802 |
字符逆序 (C语言代码)浏览:645 |
IP判断 (C语言代码)浏览:592 |
陈教主的三角形 (C语言代码)浏览:1196 |