为什么输入后就停止运行了?

P1042 [NOIP2003 普及组] 乒乓球

TRFC @ 2024-05-19 14:21:43

#include<bits/stdc++.h>
using namespace std;
long long n,x,x1,t;
string s;
char c;
int main()
{
    for(int i=0;c!='E';i++)
    {
        cin>>c;
        s[i]=c;
    }
    for(int i=0;i<s.size();i++)
    {
        if(s[i]=='W')   x++,t++;
        else    x1++,t++;
        if(t==11)
        {
            cout<<x<<":"<<x1;
            x=x1=0;
        }
    }
    cout<<endl<<endl;
    for(int i=0;i<s.size();i++)
    {
        if(s[i]=='W')   x++,t++;
        else    x1++,t++;
        if(t==21)
        {
            cout<<x<<":"<<x1;
            x=x1=0;
        }
    }
    return 0;
}

by Ice_rnfmabj @ 2024-05-19 14:30:38

@tuling_DZC 我现在手上没有编译器,我也不保证对

输入时为啥不直接getline(cin,s,'E');


by Ice_rnfmabj @ 2024-05-19 14:33:37

哦不对这似乎不是重点


by Ice_rnfmabj @ 2024-05-19 14:40:59

话说你也没有判断那个比分相差2的啊

我廿年前的代码,参考一下?

#include<bits/stdc++.h>
using namespace std;
char x;
int a[700000],n,w,l,f[2]={11,21};
int main(){
    while(x!='E'){
        if(x=='W') a[n++]=1;
        else if(x=='L') a[n++]=0;
        cin>>x;
    }
    for(int k=0;k<2;k++){
        l=w=0;
        for(int i=0;i<n;i++){
            w+=a[i];
            l+=1-a[i];
            if(w>=f[k]||l>=f[k]){
                if(w-l>=2||l-w>=2){
                    cout<<w<<":"<<l<<endl;
                    w=l=0;
                }
            }
        }
        cout<<w<<":"<<l<<endl;
        cout<<endl; 
    }
    return 0;
}

by qzm18650661990 @ 2024-05-19 21:52:10

@tuling_DZC 你的t好像自始至终都没有归0,要么t==11or21改成t%11or21==0,要么每到11or21就归零t。

但是这应该也有一个输出,你这应该还有别的错误。

(楼主、楼上和我的头像和起来实在逆天,如果再有个万叶和小鹿的就更逆天了)


by aleavf @ 2024-05-21 19:57:50

@tuling_DZC

题目理解和代码有点小问题(输入的问题)

#include<bits/stdc++.h>
using namespace std;
long long s[1000000],x=0,x1=0,f=0;
char c;
int main()
{
    //这里建议楼主建立数组来记录比赛情况 
    while(true){
        cin>>c;
        if(c=='W')  s[f]=1;
        if(c=='L')  s[f]=0;
        if(c=='E') break;
        f++;
    }
    for(int i=0;i<f;i++)
    {
        if(s[i]==1)   x++;//x++,t++;
        else   x1++; //x1++,t++;
        //这里也要吐槽一下(楼主的第一个错误),if不加括号的前提是下级代码只有一个,楼主这里有两个却不加括号 
        /*if(t==11)
        {
            cout<<x<<":"<<x1;
            x=x1=0;
        }*/
        //这里有问题,楼主明显没有理解题意,题意是说当一方分数超过11时并且分差不小于2才结束 
        if((x>=11&&x-x1>=2)||(x1>=11&&x1-x>=2)){//比赛结束的条件,楼主的第二个错误,明显没有理解题意 
            cout<<x<<':'<<x1<<endl;
            x=0;
            x1=0;
        }
    }
    cout<<x<<':'<<x1<<endl<<endl;//第三个错误,双方结束后(即读取到E的时候)要再输出一次比分 
    x=0;
    x1=0;
    for(int i=0;i<f;i++)//下面的错误同上 
    {
        if(s[i]==1)   x++;//x++,t++;
        else    x1++;//x1++,t++;
        if((x>=21&&x-x1>=2)||(x1>=21&&x1-x>=2))
        {
            cout<<x<<":"<<x1<<endl;
            x=0;
            x1=0;
        }
    }
    cout<<x<<':'<<x1;
    return 0;
}

by aleavf @ 2024-05-21 19:58:44

@tuling_DZC

求关 0.0


|