解题思路:
(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语言代码)浏览:495 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:483 |
C语言程序设计教程(第三版)课后习题3.7 (C语言代码)浏览:449 |
WU-蓝桥杯算法提高VIP-交换Easy (C++代码)浏览:1119 |
C语言程序设计教程(第三版)课后习题8.1 (C语言代码)浏览:1257 |
C语言训练-求s=a+aa+aaa+aaaa+aa...a的值 (C语言代码)浏览:613 |
字符逆序 (C语言代码)浏览:617 |
C二级辅导-公约公倍 (C语言代码)浏览:483 |
单词个数统计 (C语言代码)浏览:1012 |
C语言程序设计教程(第三版)课后习题7.5 (C语言代码)浏览:685 |