成绩排序题解 今天讲的是题目是成绩排序 题目 有N个学生的成绩,将其由高到低排序。如果成绩相同,则按姓名字符字母序排序,假设姓名不存在重复。输出排序后的信息 输入 输入第一行是一个正整数N(N<1000),接下来的N行包括N个学生的数据,每个数据包括姓名(不超过100的字符串)、成绩(小于等于100的正整数) 输出 将学生信息按成绩进行排序,成绩相同的按姓名字母序排序。输出排序后的学生信息。 样例输入1 3 zhao 90 qian 85 sun 95 样例输出1 sun 95 zhao 90 qian 85 这道题当他的思路有两种第一种是sort函数和链表,今天讲的是sort函数,首先读完题目后可知这是一道排序题,而用sort的框架是这样的: #include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<map> #include<algorithm> #include<string> using namespace std; struct student{//结构体 }stu[1005]; bool cmp(student s1,student s2){//排序 } int main(){ int n; cin>>n; //排序 //输出 return 0; } 之后我们仔细读一遍题目会发现这一道题他有两个细节一这是升序排序,二他题目说了如果成绩相同的话那么看是谁先输入。那么按着这个思路写的话代码是这样的: #include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<map> #include<algorithm> #include<string> using namespace std; struct student{//结构体 string name; int score; }stu[1005]; bool cmp(student s1,student s2){//函数 if(s1.score!=s2.score){ return s1.score>s2.score; //排序成绩 } else{ return s1.name<s2.name;//名字排序 } } int main(){ int n; cin>>n; //输入有几个人 for(int i=0;i<n;i++){ cin>>stu[i].name>>stu[i].score;//输入 } sort(stu,stu+n,cmp);//升序 for(int i=0;i<n;i++){ cout<<stu[i].name<<" "<<stu[i].score<<'\n';//输出 } return 0;//结束主函数 } 好了,这就是这道题的题解。总结一下这道题主要考的是排序