NOIP2003普及组—乒乓球

题目描述

【问题背景】国际乒联现在主席沙拉拉自从上任以来就立志于推行一系列改革,以推动乒乓球运动在全球的普及。其中11分制改革引起了很大的争议,有一部分球员因为无法适应新规则只能选择退役。华华就是其中一位,他退役之后走上了乒乓球研究工作,意图弄明白11分制和21分制对选手的不同影响。在开展他的研究之前,他首先需要对他多年比赛的统计数据进行一些分析,所以需要你的帮忙。

【问题描述】华华通过以下方式进行分析,首先将比赛每个球的胜负列成一张表,然后分别计算在11分制和21分制下,双方的比赛结果(截至记录末尾)。

比如现在有这么一份记录,(其中W表示华华获得一分,L表示华华对手获得一分):

WWWWWWWWWWWWWWWWWWWWWWLW

在11分制下,此时比赛的结果是华华第一局11比0获胜,第二局11比0获胜,正在进行第三局,当前比分1比1。而在21分制下,此时比赛结果是华华第一局21比0获胜,正在进行第二局,比分2比1。如果一局比赛刚开始,则此时比分为0比0。

你的程序就是要对于一系列比赛信息的输入(WL形式),输出正确的结果。

输入格式

每个输入文件包含若干行字符串(每行至多20个字母),字符串有大写的W、L和E组成。其中E表示比赛信息结束,程序应该忽略E之后的所有内容。

输出格式

输出由两部分组成,每部分有若干行,每一行对应一局比赛的比分(按比赛信息输入顺序)。其中第一部分是11分制下的结果,第二部分是21分制下的结果,两部分之间由一个空行分隔。

样例输入

WWWWWWWWWWWWWWWWWWWW
WWLWE

样例输出

11:0
11:0
1:1

21:0
2:1

Solution:

【必须的兵乓球比赛知识】假设11分制下,如果比值达到10:10以后,需要分值相差 2 分以上才算胜利, 比如14:12。(因此不能单纯根据某一方达到11或者21来作为胜利条件)。

#include <iostream>
#include <algorithm>
using namespace std;

int main() {
    char sign = 'Q';//设置初值为与E不同的Q,同时也不干扰W和L
    char* ch = new char[1005];
    int t;
    ch[0] = 'Q';
    for (t = 0;  ; ++t) {//存储所有字符串,遇到E则停止,E后的内容不读取
        cin>>ch[t];
        if (ch[t]=='E'){
            break;
        }
    }
    int t1=0;
    while (sign!='E') {
        int j, w, l;//当某一方胜场在10以下时,另一方达到11即胜利
        //当双方胜场均为10以上时,需要双方分值相差2分才可胜利
        for (j = 0, w = 0, l = 0; (w<11 && l<11) || (w>=10 && l>=10 && abs(w-l)<2); ++j) {
            sign = ch[t1++];
            if (sign == 'E') {
                break;
            }
            if (sign == 'W') {
                w++;
            } else if (sign == 'L') {
                l++;
            }
        }
        cout << w << ":" << l << endl;
    }
    cout<<endl;
    int t2 =0;
    sign = 'Q';
    while (sign!='E') {
        int j, w, l;//此处与11分制同理,只改动了数值
        for (j = 0, w = 0, l = 0; (w<21 && l<21) || (w>=20 && l>=20 && abs(w-l)<2); ++j) {
            sign = ch[t2++];
            if (sign == 'E') {
                break;
            }
            if (sign == 'W') {
                w++;
            } else if (sign == 'L') {
                l++;
            }
        }
        cout << w << ":" << l << endl;
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qwe641259875/article/details/86500944