求助!90分,最后一个wa

P1042 [NOIP2003 普及组] 乒乓球

@[Camelliail](/user/1035989) 建议将计分时的 “s[i+1]==‘E’” 的判断删去, 然后在循环外单独输出一次; 11分制时的输出错误就在这里:同一循环里既满足“s[i+1]==‘E’”又满足11分的输出条件 (第十个测试点为: WWWWWWWWWWWE ) 改了一下: ``` #include<bits/stdc++.h> using namespace std; /*P1042 [NOIP2003 普及组] 乒乓球*/ int main() { char s[100000]; for (int i = 0; cin >> s[i] && s[i] != 'E'; i++); int score1_W = 0, score2_W = 0, score1_L = 0, score2_L = 0;//score1代表11分制,score2代表21分制 int i = 0; if (s[0] == 'E') { cout << "0:0" << endl << endl << "0:0";//开头为E return 0; } while (s[i] != 'E') { //11分制 if (s[i] == 'W') score1_W++; if (s[i] == 'L') score1_L++;//除去对s[i+1]的判断以避免重复 if ((score1_W >= 11 || score1_L >= 11) && abs(score1_W - score1_L) >= 2) { cout << score1_W << ":" << score1_L << endl; score1_W = 0; score1_L = 0; } i++; } cout << score1_W << ":" << score1_L << endl;//将最后的输出挪到外面 cout << endl; i = 0; while (s[i] != 'E') { //21分制 if (s[i] == 'W') score2_W++; if (s[i] == 'L') score2_L++;//除去对s[i+1]的判断 if ((score2_W >= 21 || score2_L >= 21) && abs(score2_W - score2_L) >= 2) { cout << score2_W << ":" << score2_L << endl; score2_W = 0; score2_L = 0; } i++; } cout << score2_W << ":" << score2_L << endl;//将最后的输出挪到外面 return 0; } ```
by huangyige123 @ 2024-02-15 18:40:18


@[huangyige123](/user/1128658) 好!我懂了!谢谢!
by Camelliail @ 2024-02-15 19:02:03


|