【模拟】 占卜DIY

传送门

题意

去掉大小王的扑克,打乱后分成\(13\)堆,第\(13\)堆称作生命牌,\(K\)是死牌,初始状态下所有牌都面朝下,然后按照如下执行下去

  • 抽取最后一堆的第一张牌

  • 翻开这张牌,并将正面向上,放到这张牌上数字对应的堆上

  • 在刚刚放了牌的堆中抽取最后一张,做第二步

  • 抽到\(K\)就死一次

  • \(4\)命没了后,即\(4\)\(K\)都被抽出来,统计正面朝上的牌中有多少个牌其对应标号的所有牌都正面朝上

输出这个对数

题解

字符数组存储所有的牌,\(le_{i}\)记录当前堆上最后一张牌的标号,\(ans\)数组记录每一堆对应标号的正面牌有多少个

Code

#include<bits/stdc++.h>
using namespace std;
char a[20][10];
int ans[15];
int le[15];
int get(char x)
{
    if(x == 'A') return 1;
    if(x == 'K') return 13;
    if(x == 'Q') return 12;
    if(x == 'J') return 11;
    if(x == '0') return 10;
    if (x>='2' && x<='9')
        return x-'0';
}
int main()
{
    memset(ans,0,sizeof ans);

    for(int i=1;i<=12;i++)
        le[i]=4;
    for(int i = 1; i <= 13; i++)
        for(int j = 1; j <= 4; j++)
            cin>>a[i][j];

    for(int i=1;i<=4;i++)
    {
        int now = get(a[13][i]);
        while(now!=13)
        {
            ans[now]++;
            now=get(a[now][le[now]--]);
        }
    }
    int res = 0;
    for(int i = 1; i <= 12; i++)
        if(ans[i]==4) res++;
    cout<<res;
}
posted @ 2020-09-27 21:32  Hyx'  阅读(131)  评论(0编辑  收藏  举报