解题思路:
(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++代码)浏览:1342 |
十->二进制转换 (C语言代码)浏览:1330 |
C语言程序设计教程(第三版)课后习题6.9 (C语言代码)浏览:1052 |
A+B for Input-Output Practice (VI) (C语言代码)浏览:575 |
局部变量作函数返回值的问题浏览:1029 |
C语言程序设计教程(第三版)课后习题10.7 (C语言代码)浏览:742 |
The 3n + 1 problem (C语言代码)浏览:550 |
C语言程序设计教程(第三版)课后习题7.5 (C语言代码)浏览:712 |
上车人数 (C语言代码)浏览:753 |
C语言程序设计教程(第三版)课后习题5.5 (C语言代码)浏览:841 |