某啥说的。。 #include <cstdio> #include <cstring> #include <algorithm> #include <cstdlib> #include <iostream> using namespace std; #define MAXN 105 struct type{ char name[MAXN]; int time[MAXN]; int num[MAXN]; //在第几次解决了问题; int status[MAXN]; }; struct type duiwu[105]; int count0; int main(void) { int n; int chongfu(char *name); int time_tmp; char name_tmp[100],num_tmp[3],status_tmp[3]; int flag =0; while(cin>>n) { if(flag++) cout<<endl; for(int i=0;i<104;i++) for(int j=0;j<MAXN;j++) duiwu[i].time[j]=duiwu[i].status[j]=duiwu[i].num[j]=0; count0 = 0; for(int i=0;i<n;i++) { scanf("%d %s %s %s",&time_tmp,name_tmp,num_tmp,status_tmp); int now = chongfu(name_tmp); if(now==-1) //第一次出现。需要记录的信息有,该问题是否解决,如果解决,记录下时间。 { strcpy(duiwu[count0].name,name_tmp); duiwu[count0].num[num_tmp[0]-'A']=1; if(status_tmp[0]=='A') { duiwu[count0].status[num_tmp[0]-'A'] = 1; duiwu[count0].time[num_tmp[0]-'A']=time_tmp; } count0++; } else { if(duiwu[now].status[num_tmp[0]-'A']==1) //如果该问题已经解决过了。。那么就不用管它了; continue; else { duiwu[now].num[num_tmp[0]-'A']++; if(status_tmp[0]=='A') { duiwu[now].status[num_tmp[0]-'A']=1; duiwu[now].time[num_tmp[0]-'A']=time_tmp; } } } } for(int i=0;i<9;i++) { printf("%c ",i+'A'); int solved = 0; double time=0.0; double lv = 0.0; for(int j=0;j<=count0;j++) { if(duiwu[j].status[i]==1) { solved++; lv+=duiwu[j].num[i]; time+=duiwu[j].time[i]; } } if(solved) printf("%d %.2lf %.2lf/n",solved,lv/solved,time/solved); else printf("0/n"); } } return 0; } int chongfu(char *name) //找出名字重复的队伍。。如果没有重复返回-1 { for(int i=0;i<count0;i++) if(strcmp(name,duiwu[i].name)==0) return i; return -1; }