九度1014 排名 結構體排序
阿新 • • 發佈:2019-01-06
結構體排序
當分數相同時,按考號(字串)升序排序
字串排序時,在cmp函式裡,用strcmp( )來比較兩字串大小
strcmp(a, b ) > 0時,a > b
strcmp(a, b ) = 0時,a = b
strcmp(a, b ) < 0時,a < b
#include<stdio.h> #include<string.h> typedef struct { char id[25]; int sum; }NODE; NODE stu[1002]; int mark[12]; int cmp(const void *a,const void *b ) { if( ((NODE*)a)->sum != ((NODE*)b)->sum ) return ((NODE*)a)->sum > ((NODE*)b)->sum ? -1:1; else return strcmp(((NODE*)a)->id , ((NODE*)b)->id ); } int main() { int n,m,line,i,j,x,temp,num; while(scanf("%d",&n)&&n) { scanf("%d%d",&m,&line); for(i=1;i<=m;i++) scanf("%d",&mark[i]); temp=0; for(i=0;i<n;i++) { scanf("%s",stu[i].id); scanf("%d",&num); stu[i].sum=0; for(j=0;j<num;j++) { scanf("%d",&x); stu[i].sum+=mark[x]; } if(stu[i].sum>=line) temp++; } printf("%d\n",temp); qsort(stu,n,sizeof(NODE),cmp); for(i=0;i<temp;i++) printf("%s %d\n",stu[i].id,stu[i].sum); } return 0; }