九度1014 排名 结构体排序

来源:互联网 发布:解数独的软件 编辑:程序博客网 时间:2024/05/23 01:16

结构体排序

当分数相同时,按考号(字符串)升序排序

字符串排序时,在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;}