栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

信息学奥赛一本通 1922:【03NOIP普及组】乒乓球 | OpenJudge NOI 1.13 37:乒乓球 | 洛谷 P1042 [NOIP2003 普及组] 乒乓球

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

信息学奥赛一本通 1922:【03NOIP普及组】乒乓球 | OpenJudge NOI 1.13 37:乒乓球 | 洛谷 P1042 [NOIP2003 普及组] 乒乓球

【题目链接】

ybt 1922:【03NOIP普及组】乒乓球
OpenJudge NOI 1.13 37:乒乓球
洛谷 P1042 [NOIP2003 普及组] 乒乓球

【题目考点】 1. 字符串 2. 模拟 【解题思路】

首先要了解兵乓球的规则,无论是11分制还是21分制,要想取得胜利,胜方的分数必须比败方的分数多至少2分。如果双方分数只差1分,即便两人分数都超过了分制的最大分数,比赛也没有结束,直到一方的分数超过对方2分为止。
所以得到比赛结束的条件为:胜方的分数超过最大分数,且胜方的分数与对方的分数差值大于等于2。

读入数据,可以每次读入一个字符,将其填充至字符串,直到遇到字符’E’。或者每次读入一个字符串,将其连接成一个大的字符串,遍历时到’E’为止。

处理11分制和21分制的逻辑是一样的,可以写成一个函数。
遍历字符串,用两个变量记录双方的分数,如果满足结束比赛的条件,则结束本轮比赛,输出比分。再进行下一场比赛。
遍历字符串结束后,也要输出一次比分。注意:最后如果是“0:0”,也要输出。

【题解代码】 解法1:使用string类
#include 
using namespace std;
void showMatch(string s, int mp)//s:胜负字符串 mp:获胜分值 
{
    int w = 0, l = 0;//w:自己得分 l:对手得分 
    for(int i = 0; s[i] != 'E'; ++i)//遍历到E结束 
    {
        if(s[i] == 'W')
            w++;
        else
            l++;
        if(w >= mp && w-l >= 2 || l >= mp && l-w >= 2)
        {
            cout << w << ':' << l << endl;
            w = 0, l = 0;//开始下一场比赛 
        }
    }
    cout << w << ':' << l << endl;//如果是0:0,也输出。 
}
int main()
{
    string s, a;
    while(cin >> a)//将每行读入的字符串连成字符串s 
        s += a;
    showMatch(s, 11);
    cout << endl;
    showMatch(s, 21);
    return 0;
}
解法2:使用字符数组
#include 
using namespace std;
char s[100005];//s:胜负字符串
int len;//s的长度 
void showMatch(int mp)//mp:获胜分值 
{
    int w = 0, l = 0;//w:自己得分 l:对手得分 
    for(int i = 0; i < len; ++i) 
    {
        if(s[i] == 'W')
            w++;
        else if(s[i] == 'L') 
            l++;
        if((w >= mp || l >= mp) && abs(w-l) >= 2)//一方分数大于最大分数,且分数差值大于等于2 
        {
            cout << w << ':' << l << endl;
            w = 0, l = 0;//开始下一场比赛 
        }
    }
    cout << w << ':' << l << endl;//如果是0:0,也输出。 
}
int main()
{
    char c; 
    while((c = getchar()) != 'E')//将每行读入的字符串连成字符串s 
        s[len++] = c;//注意:也会把'n'填到字符串中 
    showMatch(11);
    cout << endl;
    showMatch(21);
    return 0;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/931799.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号