CSP历年复赛题-P1042 [NOIP2003 普及组] 乒乓球

原题链接:https://www.luogu.com.cn/problem/P1042

题意解读:

分别针对11分制和21分制,输出每局比分。只需要判断一局的结束条件:得分高者如果达到11或者21,且比分间隔大于等于2分,则表示一局结束,

可开始下一局,用模拟法即可解决。

100分代码:

#include <bits/stdc++.h>
using namespace std;

const int N = 2505;

string all;
int cnt;
int scores[2] = {11, 21};

int main()
{
    // 先将全部字符串读入all中
    string line;
    while(getline(cin, line)) all += line;

    // 针对11分、21分制分别处理
    for(int i = 0; i < 2; i++)
    {
        int score = scores[i];
        int w = 0, l = 0; // 比分初始值
        for(int j = 0; j < all.size(); j++)
        {
            if(all[j] == 'W') w++; // 华华得分
            else if(all[j] == 'L') l++; // 对手得分
            else if(all[j] == 'E') break; // 比赛结束

            //如果得分超过11或者21,且比分间隔>=2,表示一局结束,输出比分
            if(max(w, l) >= score && abs(w - l) >= 2)
            {
                cout << w << ":" << l << endl;
                w = l = 0;
            }
        }
        // 如果一局比赛未结束,也要输出本局比分
        cout << w << ":" << l << endl;
        //11分制和21分制之间有换行
        if(i == 0) cout << endl;
    }
    
    return 0;
}

 

posted @ 2024-05-22 11:06  五月江城  阅读(77)  评论(0编辑  收藏  举报