# 题意
去掉大小王的扑克, 打乱后分成 13 堆, 第 13 堆称作生命牌, K 是死牌, 初始状态下所有牌都是面朝下
1) 抽取最后一堆的第一张牌
2) 翻开这张牌, 并将正面向上, 放到这张牌上数字对应的堆上
3) 在刚刚放了牌的堆中抽取最后一张, 做第二步
4) 抽到 k 就死一次
5) 当 4 命没了后, 即 4 个 k 都被抽出来, 统计正面朝上的牌中有多少个牌其对应标号的所有牌都正面朝上输出这个对数
# 题解
字符数组存储所有的牌, le[i] 记录当前堆上最后一张牌的标号, ans 数组记录每一堆对应标号的正面牌有多少个
- #include<bits/stdc++.h>
- using namespace std;
- char a[20][10];
- int ans[15];
- int le[15];
- inline 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;
- }
占卜 DIY
来源: http://www.bubuko.com/infodetail-3447828.html