洛谷P1042乒乓球

该程序设计题要求根据输入的赢输字符串,在11分和21分规则下判断比赛是否结束。当满足分差大于等于2且达到预设分数时,记录并重置比分。程序使用C++编写,通过while循环读取输入,更新双方得分,并检查结束条件。在21分制下,结束的比分被存储到向量中以供后续输出。
摘要由CSDN通过智能技术生成

其实想这样的他说啥你就写啥的题我们统称模拟算法, 这种题的关键就是他说啥你就做啥, 不要搞什么歪门邪道的是,比如说,题干让你求两个int求和,结果你却用高精度加法求和。

话说回来,我们先来看题,题干说这道题就是给定一串输与赢的字符串,以"E"结尾, 然后让你算一下11分值下和21分值下的结果, 但这里要注意题目说停止记录的规定。规定是,在 11 分制下,比赛结果是11:0或0:11, 在 21 分制下,比赛结果是21:0或0:21, 而且在两种分值下都要保证分差大于或者等于 2,才一局结束。

那么判断比赛是否结束的程序便是:

if((w11 >= 11 || l11 >= 11) && abs(w11 - l11) >= 2)
{
    cout << w11 << ':' << l11 << endl;
    w11 = 0;
    l11 = 0;
}
       
if((w21 >= 21 || l21 >= 21) && abs(w21 - l21) >= 2)
{
    v.push_back(w21);
    v.push_back(l21);
    w21 = 0;
    l21 = 0;
}

然后在套个while来输入和记录情况,所以整个程序便是

#include <iostream>
#include <cmath>
#include <vector>

using namespace std;

int main()
{
    int w11 = 0, l11 = 0, w21 = 0, l21 = 0;
    vector<int> v;
    char ch;
    while(cin >> ch)
    {
        if('E' == ch)
        {
            cout << w11 << ':' << l11 << endl<< endl;
            break;
        }
        if('W' == ch)
        {
            w11++;
            w21++;
        }
        else
        {
            l11++;
            l21++;
        }
        if((w11 >= 11 || l11 >= 11) && abs(w11 - l11) >= 2)
        {
            cout << w11 << ':' << l11 << endl;
            w11 = 0;
            l11 = 0;
        }
        if((w21 >= 21 || l21 >= 21) && abs(w21 - l21) >= 2)
        {
            v.push_back(w21);
            v.push_back(l21);
            w21 = 0;
            l21 = 0;
        }
    }
    for(int i = 0; i < v.size(); i += 2)
    {
        cout << v[i] << ':' << v[i + 1] << endl;
    }
    cout << w21 << ':' << l21;
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值