算法日记4:扑克牌顺子+数组概念

假设一副不包含大小王的普通的扑克牌,我们用
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--;
		}
	}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值