解题思路:
(1)我的思路是直接用C++中的STL的排序函数sort实现,但是无法解决成绩相同时,按原来的输入的顺序输出,所以多增加一个成员变量id号保存原来的序号即可。
(2)发表自己题解之后发现其他大神写的题解,才发现还有一个函数stable_sort()可以实现前面的功能,所以参考大神的代码发表第二种题解。
参考代码:
//第一种方法,自己写的,用sort函数实现,为了解决成绩相同时,按原来的输入的顺序输出, // 多增加一个成员变量id号保存原来的序号,稍微复杂一点点。 #include <bits/stdc++.h> using namespace std; typedef struct { int id; char name[21]; char sex[21]; int age; int score; }Student; bool cmp(Student s1,Student s2) { if(s1.score!=s2.score ) return s1.score<s2.score ; else return s1.id<s2.id; } int main() { int n; Student s[1005]; cin>>n; for(int i=0;i<n;i++) { cin>>s[i].name>>s[i].sex>>s[i].age>>s[i].score; s[i].id=i; } sort(s,s+n,cmp); for(int i=0;i<n;i++) { cout<<s[i].name<<" "<<s[i].sex<<" "<<s[i].age<<" "<<s[i].score<<endl; } return 0; }
//第二种方法,使用了stable_sort函数实现,更简单。 #include <bits/stdc++.h> using namespace std; typedef struct { char name[21]; char sex[21]; int age; int score; }Student; bool cmp(Student s1,Student s2) { return s1.score<s2.score ; } int main() { int n; Student s[1005]; cin>>n; for(int i=0;i<n;i++) cin>>s[i].name>>s[i].sex>>s[i].age>>s[i].score; stable_sort(s,s+n,cmp); for(int i=0;i<n;i++) { cout<<s[i].name<<" "<<s[i].sex<<" "<<s[i].age<<" "<<s[i].score<<endl; } return 0; }
0.0分
0 人评分
淘淘的名单 (C语言代码)答案错误???浏览:596 |
母牛的故事 (C语言代码)浏览:962 |
C语言程序设计教程(第三版)课后习题6.6 (C语言代码)浏览:353 |
回文数字 (C语言代码)浏览:2515 |
1017题解浏览:608 |
C语言程序设计教程(第三版)课后习题9.4 (C语言代码)浏览:652 |
C语言程序设计教程(第三版)课后习题7.3 (C语言代码)浏览:406 |
A+B for Input-Output Practice (IV) (C语言代码)浏览:509 |
数列问题 (C语言代码)浏览:1027 |
2003年秋浙江省计算机等级考试二级C 编程题(1) (C语言代码)浏览:820 |