给定扑克牌,判断有多少种可能的顺子方案。其中顺子是由5个或者以上的连续数字组成,给定当前的手牌,不同的牌组成的相同的顺子视为不同方案,如3 3 4 5 6 7,可以组成两种不同的(3,4,5,6,7)的顺子。
示例1
输入
4
7
7 3 3 4 4 5 6
5
2 3 4 6 A
5
A 2 3 4 5
6
3 4 5 6 7 8
输出
4
0
1
3
代码如下:
#include<bits/stdc++.h>
using namespace std;
int a[100];
int sum,n,vis[100],ans[100];
void dfs(int step,int d){
if(step==d) {
sum++;
return;
}
for(int i =step;i<n;i++){
if(vis[i])
continue;
if(step>0 && a[i]!= ans[step-1]+1)
continue;
vis[i]=1;
ans[step] =a[i];
dfs(step+1,d);
vis[i] = 0;
}
}
int main()
{
int tcase,v;
string s;
scanf("%d",&tcase);
while(tcase--){
scanf("%d",&n);
getchar();
int id = 0;
while(cin>>s){
if(s[0]=='A') a[id++]=1;
else if (s[0]=='J') a[id++]=11;
else if (s[0]=='Q') a[id++]=12;
else if (s[0]=='K') a[id++]=13;
else if(s.length()==1) a[id++] = s[0] - '0';
else a[id++] = (s[0]-'0')*10 + s[1] - '0';
if(id==n) break;
}
sort(a,a+n);
sum = 0;
for(int i=5;i<=n;i++){
memset(vis,0,sizeof(vis));
dfs(0,i);
}
printf("%d\n",sum);
}
return 0;
}