九度1014 排名
阿新 • • 發佈:2018-12-30
/********************************* * 日期:2012-6-29 * 作者:SJF0115 * 題號: 九度1014 * 題目:排名 * 結果:AC * 題意: * 總結: **********************************/ #include<stdio.h> #include<stdlib.h> #include<string.h> typedef struct Student{ //考號 char ID[21]; //做出題目數量 int num; //做出的題目編號 int questionID[11]; //總分 int totalGrade; }Student; //排序 int cmp(const void *a,const void *b) { struct Student *c=(Student*)a; struct Student *d=(Student*)b; if(c->totalGrade!=d->totalGrade) return d->totalGrade - c->totalGrade; else return strcmp(c->ID,d->ID); } int main() { int N,M,G; int Grade[11]; //輸入重定向,輸入資料將從in.txt檔案中讀取 //freopen("C:\\Users\\SJF\\Desktop\\in.txt","r",stdin); Student student[1001]; while(scanf("%d",&N)!=EOF) { int i,j,count = 0; if(N == 0){ break; } scanf("%d %d",&M,&G); for(i = 0;i<M;i++){ scanf("%d",&Grade[i]); } for(i = 0;i<N;i++){ scanf("%s %d",&student[i].ID,&student[i].num); student[i].totalGrade = 0; for(j = 0;j<student[i].num;j++){ scanf("%d",&student[i].questionID[j]); student[i].totalGrade += Grade[student[i].questionID[j] - 1]; } //計算過線人數 if(student[i].totalGrade >= G){ count ++; } //printf("%s %d %d\n",student[i].ID,student[i].num,student[i].totalGrade); } //輸出過線人數 printf("%d\n",count); //排序 qsort(student,N,sizeof(student[0]),cmp); for(i = 0;i<N;i++){ if(student[i].totalGrade >= G){ printf("%s %d\n",student[i].ID,student[i].totalGrade); } } } return 0; }