1. 程式人生 > >九度1014 排名 結構體排序

九度1014 排名 結構體排序

結構體排序

當分數相同時,按考號(字串)升序排序

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