HDU2060 Snooker斯诺克

1.题意

玩snooker(斯诺克)游戏,一共有21只目标球,15只红球(红球每个为1分,6只彩球(分值分别是2,3,4,5,6,7)。游戏规则是如果桌面上还有红球,就必须先打红球,打入洞可以再打彩球,彩球打入洞后可以拿出来并获得相应的分数,赢了后可以交替循环。如果桌面上没有红球了,只有彩球,那么这时候打彩球只能按着一定的顺序来打,从2,3一直到7分球,(桌上没有红球后,最后的这几个彩球打入洞后不用拿出来,直接加上相应的分数)。

刚开始我看不懂,然后就去下载 qq游戏:腾讯桌游 玩了几把。然后直到它是怎样统计分的了。

2.做法 与 错误点

做法:

本题其实是以桌面上的求数来决定的。设球数为 ball_left,      我的分数为 p_score,    对手分数为 o_score.

①。.如果有大于6个球,说明还有6个彩球,ball_left - 6个红球,那么为了获取最大的分数,我必须ball_left-6个红球全中。每次中后还有一次机会打彩球,为了最大值,我必须打分数最高的值(7分,黑球),因此我需要(ball_left-6)*1 + (ball_left-6)*7。再加上红球打完后还有6个彩球,为了获取最大分,我必须全赢,即2,3,4,5,6,7,一共27分。那么将这3个结果加起来即我最高还可以打多少分。即(ball_left-6)*1 + (ball_left-6)*7 + 27. 

②。正好还有6个球,则只剩下彩球,即加上27分即可。

③。少于6个求,则只剩下彩球,设定一个数组sc[7] = {0,2,3,4,5,6,7},代表他们的分数,然后还剩几个球,就从第几个开始统计分数,然后加到末尾即可。

最后把我的分数增加的分数相加,判断我的最终最大分数与对手分数大小,如果最大分数>=对手分数,那么我有可能赢,否则没可能

易错点:

我忘了写>=中的=号,造成了WA,希望不要忘了这个细节。

3.代码

#include <iostream>
using namespace std;

int sc[7] = {0,2,3,4,5,6,7};

int main()
{
    int kase;
    int ball_left,p_score,o_score;
    cin >> kase;
    while(kase--)
    {
        cin >> ball_left >> p_score >> o_score;

        if(ball_left>=6)
        {
            p_score += (ball_left-6)*(1+7)+27;
        }
        else
        {
            for(int i = 6-ball_left+1; i<=6; i++)
                p_score += sc[i];
        }
        if(p_score >= o_score)
            cout << "Yes" << endl;
        else
            cout << "No" << endl;
    }
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值