题目

小明被劫持到X赌城,被迫与其他3人玩牌。

一副扑克牌(去掉大小王,共52张),均匀发给4个人,每人13张。

这时,小明脑子突然冒出一个问题:

如果不考虑花色,只考虑点数,也不考虑自己得到的牌先后顺序,自己手里能拿到的初始牌型组合一共有多少种呢?

要求

输出该整数,不要输出任何多余的内容。

分析过程

一共有13张牌,1234~10JQK,我们先试着考虑按顺序发牌。

  1. 得到1,可能的几率是0或者14张,然后按照顺序123JQK顺序得到
  2. 如果手里拿到的牌足够13张,则种数+1
  3. 如果按照顺序123~JQK已经轮完了,也就是发完牌。或者手里的牌大于13张,则跳过。

实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
package lab;

public class 牌醒种数02 {
static int cnt = 0; //拿到牌的种数
static int sum = 0; // 13张牌

public static void main(String[] args) {
dfs(0);
System.out.println(cnt);
}

static public void dfs (int u) { //u牌的类型123456-JQK

//sum手中的拿到牌数大于13
//u 123-JQK到底了
if(sum>13 || u>13) return;

//当牌拿到13张就加一种方法
if (sum==13) {
cnt++;
return;
}

//牌的类型,拿到0张或者1~4张
for (int i = 0; i <=4; i++) {
sum+=i;
dfs(u+1);
sum-=i;
}
}

}