50分WA#2#3#4#5#9

P1042 [NOIP2003 普及组] 乒乓球

umirin @ 2024-12-03 21:47:15

代码如下

#include<bits/stdc++.h>
using namespace std;
int hh=0,hl=0,i=1;
char a='W',ast[62510];
int main(){
    while(a=='W'||a=='L'){
        cin>>a;
        ast[i]=a;
        i++;
        if(a=='W'){
            hh++;
        }
        if(a=='L'){
            hl++;
        }
        if((hh>=11&&hh-hl>=2)||(hl>=11&&hl-hh>=2)){
            cout<<hh<<":"<<hl<<endl;
            hh=0;
            hl=0;
        }
    }
    cout<<hh<<":"<<hl<<endl<<endl;
    hh=0;
    hl=0;
    for(int j=1;j<=i;j++){
        if(ast[j]=='W'){
            hh++;
        }
        if(ast[j]=='L'){
            hl++;
        }
        if(ast[j]=='E'){
            break;
        }
        if(hh==21||hl==21){
            cout<<hh<<":"<<hl<<endl;
            hh=0;
            hl=0;
        }
    }
    cout<<hh<<":"<<hl<<endl;
    return 0;
}

by WLOG404 @ 2024-12-04 23:08:46

if((hh>=11&&hh-hl>=2)||(hl>=11&&hl-hh>=2)){
            cout<<hh<<":"<<hl<<endl;
            hh=0;
            hl=0;
        }

有疏漏,如果11:10也是一局结束了

参考如下:

if((hh==11 && hl<10)||(hl==11 && hh<10)||(hh>11 && hl==hh-2)||(hl>11 && hh==hl-2)){
            cout<<hh<<":"<<hl<<endl;
            hh=hl=0;
        }

by Pectics @ 2024-12-05 19:59:56

@WLOG404

为什么? \ 11:10 \ (true&&false)||(false&&false) // false \ 没有结束啊


by WLOG404 @ 2024-12-05 23:11:01

不好意思,昨天晚上我太困了看错了

你的判断没有问题,是输入的问题

输入字符是默认以空格或者换行分开的,你可以这样输入:

string st="",game;
while(cin>>game)
    for(i=0;i<game.length();i++)
        if(game[i]=='E')goto Halt;
        else st+=game[i];
Halt:
for(i=0;i<st.length();i++){
//……后面就是判断比赛是否结束

by WLOG404 @ 2024-12-05 23:11:46

因为考虑到E后面可能还有其他乱七八糟的输入


by umirin @ 2024-12-09 18:16:44

@WLOG404 好的好的,明白


by umirin @ 2024-12-11 19:10:30

已AC,错误并非未判断输入,而是没有关于21分制下获胜方得分大于21的判断。


|