假设一副不包含大小王的普通的扑克牌,我们用
A,2,3,4,5,6,7,8,9,10,J,Q,K分别表示1-13的扑克牌数值。网易内部
开发了一个新的玩法,其中顺子是由5个或以上的连续数值的牌所
组成。如A-2-3-4-5 ,8-9-10-J-Q-K都是符合定义的顺子,但是10-
J-Q-K-A不符合定义,不是顺子。
给定当前的手牌,我们希望知道总共有多少种顺子的方案。不同
的牌组成的相同的顺子视为不同方案,如334567,可以组成
两种不同的(3,4,5,6,7)的顺子。
输入描述:
每个输入数据包含多个测试点。
第一行为测试点的个数工(T <= 50)。
对于每个测试点,第一行为- -个整数2(0 < N <= 20), 表示
当前的手牌数量。
接下来- -行包含N个不同的数值(用
A,2,3,4,5,6,7,8,9,10,J,Q, k表示),表示手牌的数值。
保证同样的数值不会出现超过4次。
输出描述:
对于每个测试点,输出可能的顺子方案数。
public class solution {
public static void main(String args[]) {
Scanner sc=new Scanner(System.in);
int T=sc.nextInt();
while(T>0) {
int result=0;
int N=sc.nextInt();
int a[]=new int[N];
String str;
char c;
int b[]=new int[14];
for(int i=0;i<N;i++) {
str=sc.next();
if(str.equals("10")) {
a[i]=10;
b[10]++;
continue;
}
c=str.charAt(0);
if(c>='2'&&c<='9') {
a[i]=(int)(c-'0');
}else if(c=='A') a[i]=1;
else if(c=='J') a[i]=11;
else if(c=='Q') a[i]=12;
else if(c=='K') a[i]=13;
b[a[i]]++;
}
if(a.length<5) {
System.out.println("0");
continue;
}
for(int i=1;i<14;i++) {
if(b[i]==0) continue;
int index=1;
while(b[i+index]>0) {
if(index>=4) {
int temp=1;
for(int k=i;k<=i+index;k++) {
temp*=b[k];
}
result+=temp;
}
index++;
}
}
System.out.println(result);
T--;
}
}
}