题目:http://acm.hdu.edu.cn/showproblem.php?pid=1236
数据原因估计冒泡排序应该也能过,不过我不知道我的代码为什么会出错。。。
代码:
- C/C++ code
#include<stdio.h> #include<string.h> #include<stdlib.h> #define MAX 1005 struct STU { char name[20]; int m; int num[11]; int sum; }stu[MAX]; int cmp(const void *a,const void *b) { struct STU *c=(struct STU *)a; struct STU *d=(struct STU *)b; if(c->sum!=d->sum) {return (d->sum-c->sum);} else {return (strcmp(c->name,d->name)>0)?1:-1;} } int main() { int N,M,G,score[11],i,j,n; while(scanf("%d",&N)==1,N) { scanf("%d%d",&M,&G); for(i=1;i<=M;i++) {scanf("%d",&score[i]);} n=0; for(i=1;i<=N;i++) { scanf("%s %d",&stu[i].name,&stu[i].m); stu[i].sum=0; for(j=1;j<=stu[i].m;j++) { scanf("%d",&stu[i].num[j]); stu[i].sum+=score[stu[i].num[j]]; } if(stu[i].sum>=G) {n++;} } qsort(stu+1,N,sizeof(stu[0]),cmp); printf("%d\n",n); for(i=1;i<=n;i++) {printf("%s %d\n",stu[i].name,stu[i].sum);} } return 0; }
------解决方案--------------------
char name[20];
=>
char name[21];