台州oj 5062 “五张”扑克牌游戏

                                                      5062: “五张”扑克牌游戏 分享至QQ空间 去爱问答提问或回答

时间限制(普通/Java):1000MS/3000MS       内存限制:65536KByte
总提交: 95            测试通过:32

描述

YuYu最近喜欢上了爸爸小时候爱玩的游戏,这个游戏名为“五张”,游戏规则是这样的:

(1)双方一开始各有5张牌,由石头剪刀布游戏决定先出牌的玩家;

(2)54张牌去掉大小王,其它剩余的牌面大小顺序为3<4<5<6<7<8<9<10<J<Q<K<A<2;

(3)可以出单张、对子(2张相同)、三条(3张相同)、炸弹(4张相同),张数相同时大的可以压小的,比如22可以压33,AAA可以压KKK,4444可以压3333等。而炸弹可以压单张、对子和三条,如3333可以压10、99、222等。

YuYu总是记不住这些规则,每次明明有可以压的牌,总是说没有,现在已知YuYu现在手中的牌,以及爸爸现在出的牌,请你判断YuYu能不能出牌。


输入

输入数据有多组,第一行为数据组数T,接下来有T组数据,每组数据有2行:

第1行第一个数为YuYu手中牌的张数n(1<=n<=5),后面是n张牌的面值,各数据之间用空格隔开。

第2行第一个数为爸爸现在出的牌张数m(1<=m<=4,1为单张、2为对子、3为三条、4为炸弹),后面是其牌面值。

各行的数据之间用空格隔开。

输出

对于每组数据,如果YuYu能出牌则输出Yes,否则输出No。

样例输入

样例输出

题目来源

台州学院“达内杯”第九届大学生程序设计竞赛

标签

推荐给好友

题目上传者

crq

 

解法:map+模拟!!

#include<iostream>
#include<stdio.h>
#include<map>
#include<cstring>
#include<string>
using namespace std;
int main()
{
    int T;
    map<string,int>pq;
    pq["3"]=3,pq["4"]=4,pq["5"]=5;
    pq["6"]=6,pq["7"]=7,pq["8"]=8,pq["9"]=9,pq["10"]=10;
    pq["J"]=11,pq["Q"]=12,pq["K"]=13,pq["A"]=14,pq["2"]=15;
    cin>>T;
    while(T--)
    {
        int m,a[16]={0},n;
        string str,s;
        cin>>n;
        for(int i=0;i<n;i++)
        {
            cin>>str;
            a[pq[str]]++;
        }
        cin>>m>>s;
        int f=0,G=0;
        for(int i=3;i<16;i++)
            if(a[i]==4)
                G=1;
        if(m==1)
        {
            for(int i=pq[s];i<16;i++)
            {
                if(G||i!=pq[s]&&a[i])
                {
                    f=1;
                    cout<<"Yes\n";
                    break;
                }
            }
            if(!f)
                cout<<"No\n";
        }
        else if(m==2)
        {
            for(int i=pq[s];i<16;i++)
            {
                if(G||i!=pq[s]&&a[i]>=m)
                {
                    f=1;
                    cout<<"Yes\n";
                    break;
                }
            }
            if(!f)
                cout<<"No\n";
        }
        else if(m==3)
        {
            for(int i=pq[s];i<16;i++)
            {
                if(G||i!=pq[s]&&a[i]==m)
                {
                    f=1;
                    cout<<"Yes\n";
                    break;
                }
            }
            if(!f)
                cout<<("No\n");
        }
        else
        {
            for(int i=pq[s]+1;i<16;i++)
            {
                if(a[i]==m)
                {
                    f=1;
                    cout<<"Yes\n";
                    break;
                }
            }
            if(!f)
                cout<<"No\n";
        }
    }
    return 0;
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值