@[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