题解 | #成绩排序#
成绩排序
https://www.nowcoder.com/practice/0383714a1bb749499050d2e0610418b1
#include <stdio.h> typedef struct Student{ char name[20]; int score; int order; }Student; int cmp0(const void*a,const void*b){ if(((Student*)a)->score==((Student*)b)->score){ return ((Student*)a)->order>((Student*)b)->order;//按输入顺序升序 } return ((Student*)a)->score<((Student*)b)->score;//按分数降序 } int cmp1(const void*a,const void*b){ if(((Student*)a)->score==((Student*)b)->score){ return ((Student*)a)->order>((Student*)b)->order;//按输入顺序升序 } return ((Student*)a)->score>((Student*)b)->score;//按分数升序 } int main() { int n,rule; while(~(scanf("%d%d",&n,&rule))){//这里的scanf里面的"%d\n%d"加不加\n都行 Student arr[n]; for(int i=0;i<n;++i){ scanf("%s %d",&arr[i].name,&arr[i].score); arr[i].order=i; } if(rule==0){//按分数降序 qsort(arr,n,sizeof(Student),cmp0); } if(rule==1){//按分数升序 qsort(arr,n,sizeof(Student),cmp1); } for(int i=0;i<n;++i){ printf("%s %d\n",arr[i].name,arr[i].score); } } return 0; }