题解 | #成绩排序#
成绩排序
https://www.nowcoder.com/practice/0383714a1bb749499050d2e0610418b1
#include <iostream> #include<string> #include<algorithm> using namespace std; struct stu { char *name; int grade; int order;//用于标明先后顺序 }; bool cmp_ascending(stu a,stu b) { if(a.grade!=b.grade)return a.grade<b.grade; else return a.order<b.order; } bool cmp_descending(stu a,stu b) { if(a.grade!=b.grade)return a.grade>b.grade; else return a.order<b.order; } int main() { int num,cmptype; //cout<<"test"<<endl; while (cin >> num >> cmptype) { stu *a=(stu*)malloc(sizeof(stu)*(num+2)); //cout<<sizeof(stu)<<" "<<sizeof(a)<<endl; for(int i=0;i<num;i++) { a[i].name=(char*)malloc(sizeof(char)*30); cin>>a[i].name>>a[i].grade; a[i].order=i+1; //cout<<i<<" "<<num<<endl; } if(cmptype==0)sort(a,a+num,cmp_descending); else sort(a,a+num,cmp_ascending); for(int i=0;i<num;i++)cout<<a[i].name<<" "<<a[i].grade<<endl; } } //报错原因在字符串string未初始化 // 64 位输出请用 printf("%lld")