洛谷题解P1042 乒乓球

原题传送门

(Thinking)

看到这么冗长的题面 这道题是一道纯模拟题,主要来看思路

思路也很简单:

开一个(win[i])数组,来记录(Player 1)(Player 2)的胜场数

for(int i=1;cin>>str&&str!='E';i++){      //单个字符读入&防止E及以后的读入
        if(str=='W') win[i]=1;
        if(str=='L') win[i]=2;
}

在统计时,分为11分和21分两个部分来操作、步骤基本一致。

  • (win[i]==1 player1++)
  • (win[i]==2 player2++)
  • (win[i]==0 print player1=player2=0)
  • 判断获胜者

(Code)

#include<iostream>
#include<cstdio>
#include<string>
using namespace std;
inline void read(int &x){
    int f=1;
    char ch=getchar();
    x=0;
    while(ch<'0'||ch>'9'){
        if(ch=='-') f=-1;
        ch=getchar();
    }
    while(ch>='0'&&ch<='9'){
        x=x*10+ch-'0';
        ch=getchar();
    }
    x*=f;
}
char str;
int win[70000];
int p1,p2;
int main(){
    for(int i=1;cin>>str&&str!='E';i++){
        if(str=='W') win[i]=1;
        if(str=='L') win[i]=2;
    }
    for(int i=1;;i++){      //11分统计
        if(win[i]==1) p1++;
        if(win[i]==2) p2++;
        if(win[i]==0){
            printf("%d:%d
",p1,p2);
            break;
        }
        if(p1-p2>=2||p2-p1>=2){
            if(p1>=11||p2>=11){
                printf("%d:%d
",p1,p2);
                p1=p2=0;
            }
        }
    }
    cout<<endl;
    p1=p2=0;
    for(int i=1;;i++){      //21分统计
        if(win[i]==1) p1++;
        if(win[i]==2) p2++;
        if(win[i]==0){
            printf("%d:%d
",p1,p2);
            break;
        }
        if(p1-p2>=2||p2-p1>=2){
            if(p1>=21||p2>=21){
                printf("%d:%d
",p1,p2);
                p1=p2=0;
            }
        }
    }
    return 0;
}
原文地址:https://www.cnblogs.com/-pwl/p/13736321.html