思路
这道题的大意就是根据OJ平台的规则设计一个判断胜负的程序。
使用结构体表示每个参加比赛的选手会比较方便,很简单。
代码
#include<stdio.h> #include<stdlib.h> struct ACM { char name[20]; int timesTry[4];//尝试的次数 int timePer[4];//AC每道题花费的时间 int numberCorrect;//做出来的题目总数 int timeTotal;//总罚时 }ACMer; int main(int argc, char const *argv[]) { int n;//总人数 scanf("%d",&n); struct ACM *group = (struct ACM*)malloc(sizeof(ACMer)*n); int i; //读取数据 for(i = 0; i < n; i++){ group[i].numberCorrect = 0; group[i].timeTotal = 0; scanf("%s",group[i].name); int j; for(j = 0; j < 4; j++){ scanf("%d%d",&group[i].timesTry[j],&group[i].timePer[j]); if(group[i].timePer[j] == 0)continue; else{ group[i].numberCorrect++; //如果罚时不为0,那么做对的题目数量加1,总时间增加 group[i].timeTotal += group[i].timePer[j] + 20*(group[i].timesTry[j] - 1); } } } //比较数据 int index=0;//记录最优成绩的ACMer for(i = 1; i < n; i++){ if(group[index].numberCorrect > group[i].numberCorrect)continue; else if(group[index].numberCorrect < group[i].numberCorrect)index = i; else{ if(group[index].timeTotal < group[i].timeTotal)continue; else{ index = i; } } } printf("%s %d %d\n",group[index].name,group[index].numberCorrect,group[index].timeTotal); return 0; }