不多说了,又是一水题。 下午Time那题过不了,真是郁闷。。 那么搓的代码能过才怪。。。。 这题主要是程序流程要写清楚了。。 其他没什么需要注意的。 #include <stdio.h> #include <string.h> int main(int argc, char* argv[]) { int n,m,i,j; int flag_a,flag_b,status; int score_a,score_b; char nameA[40]; char nameB[40]; char winName[40]; char szStatus[40]; int winFlag; while (scanf("%d", &n) != EOF) { for (j=0;j<n;j++) { flag_a = 0; flag_b = 0; status = -1;//0平局 1A领先 2B领先 score_a = 0; score_b = 0; winFlag = 0;//1A赢 2B赢 scanf("%d", &m); scanf("%s", nameA); scanf("%s", nameB); for (i = 0;i<m;i++) { scanf("%s", winName); if (strcmp(winName, nameA) == 0) { switch (flag_a) { case 0: flag_a++; score_a = 15; break; case 1: flag_a++; score_a = 30; break; case 2: flag_a++; score_a = 40; if (flag_b == 3) status = 0; break; case 3: if (flag_b<3) winFlag = 1; if (status == 0) status = 1; else if (status == 1) winFlag = 1; else if (status == 2) status = 0; break; } } else { switch (flag_b) { case 0: flag_b++; score_b = 15; break; case 1: flag_b++; score_b = 30; break; case 2: flag_b++; score_b = 40; if (flag_a == 3) status = 0; break; case 3: if (flag_a<3) winFlag = 2; if (status == 0) status = 2; else if (status == 1) status = 0; else if (status == 2) winFlag = 2; break; } } strcpy(szStatus, ""); if (winFlag>0) { switch (winFlag) { case 1: strcpy(szStatus, "game "); strcat(szStatus, nameA); break; case 2: strcpy(szStatus, "game "); strcat(szStatus, nameB); break; } score_a = 0; score_b = 0; winFlag = 0; flag_a = 0; flag_b = 0; status = -1; } else if (flag_a == 3&&flag_b == 3) { switch (status) { case 0: strcpy(szStatus, "deuce"); break; case 1: strcpy(szStatus, "adv. "); strcat(szStatus, nameA); break; case 2: strcpy(szStatus, "adv. "); strcat(szStatus, nameB); break; } } printf("+----------+--+/n"); printf("|%-10s|%2d|/n", nameA, score_a); printf("+----------+--+/n"); printf("|%-10s|%2d|/n", nameB, score_b); printf("+----------+--+/n"); printf("|%-13s|/n", szStatus); printf("+-------------+/n"); } printf("/n"); } } return 0; }