原题链接:117. 占卜DIY
解题思路
搜索+模拟
感觉这道题目,就是一道纯模拟的题目,没有什么难点,大致有几个易错点,这里提醒一下。
- 每次拿该堆的末尾,这一点容易犯错,因为不是拿之前的第四张牌,而是当前的末尾的牌
- 读入问题,这里读入需要特判几个点,也就是A,10,J,Q,K
- 注意储存问题,我的代码,下标0表示堆顶,5表示堆尾
样例代码
#include <bits/stdc++.h>
using namespace std;
vector<int> a[14];
int sum[14],c[14];
inline int get(char x)
{
if(x>='2' && x<='9')
return x-'0';
if(x=='A')
return 1;
if(x=='0')
return 10;
if (x=='J')
return 11;
if (x=='Q')
return 12;
if (x=='K')
return 13;
}
int main()
{
for(int i=1;i<=13;i++)
{
a[i].push_back(0);
for(int j=1;j<=4;j++)
{
char ch=getchar();
getchar();
a[i].push_back(get(ch));
}
c[i]=4;
}
for(int i=1;i<=4;i++)
{
int x=a[13][i];
while(x!=13)
{
sum[x]++;
x=a[x][c[x]--];
}
}
int ans=0;
for(int i=1;i<=12;i++)
if(sum[i]==4)
ans++;
cout<<ans;
return 0;
}