【模拟】 占卜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;
}