分析
利用$ deque<int\> $对整个过程进行模拟.
C++ 代码
#include <iostream>
#include <cstring>
#include <algorithm>
#include <map>
#include <queue>
using namespace std;
deque<int> q[14];
char c;
map<char,int> mp,num;
int life=4,op=13,ans;
int main()
{
mp['A']=1,mp['0']=10,mp['J']=11,mp['Q']=12,mp['K']=13;
for(int i=2;i<=9;i++) //将字符映射为数字
mp[i+'0']=i;
for(int i=1;i<=13;i++)
{
for(int j=0;j<4;j++)
{
scanf("%c", &c);
q[i].push_back(mp[c]);
getchar();
}
}
while(1)
{
int t;
if(op==13){ //如果当前操作为K(13)
t=q[op].front(); //从第13堆从头抽一张
q[op].pop_front();
}
else{ //当前操作不是13
t=q[op].back(); //从堆尾抽一张
q[op].pop_back();
}
if(t!=13){ //如果抽到的牌不是13,就让计数器++
num[t]++;
op=t;
}
else{ //否则,生命减1,再从第13堆操作
life--;
op=13;
}
if(life<=0) break;
}
for(int i=1;i<=12;i++) //统计最终得到的对数
if(num[i]==4) ans++;
cout<<ans;
return 0;
}