解题思路:
(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 人评分
WU-整数平均值 (C++代码)浏览:1267 |
C语言训练-大、小写问题 (C语言代码)浏览:684 |
字符删除 (C语言代码)浏览:730 |
【偶数求和】 (C语言代码)浏览:443 |
P1044 (C++代码)浏览:513 |
C语言程序设计教程(第三版)课后习题6.4 (C语言代码)浏览:465 |
P1001 (Java代码)浏览:707 |
ACM俱乐部密码浏览:937 |
开心的金明 (C语言代码)浏览:549 |
WU-玉龙学长买雪糕 (C++代码)浏览:1122 |