題目描述
牌型種數
小明被劫持到X賭城,被迫與其他3人玩牌,
一副撲克牌(去掉大小王牌,共52張),均勻發給4個人,每個人13張,
這時,小明腦子里突然冒出一個問題:
如果不考慮花色,只考慮點數,也不考慮自己得到的牌的先后順序,自己手里能拿到的初始牌型組合一共有多少種呢?
請填寫該整數,不要填寫任何多余的內容或說明文字,
解題思路
方法一:暴力列舉
最先想到的辦法是暴力列舉,只要回答答案的話不用考慮運行記憶體這樣可以節省思考時間
參考代碼
public class Main {
public static void main(String[] args) {
int [] a=new int [13];
int count=0;
for(a[0] = 0 ; a[0] < 5 ; a[0]++)
for(a[1] = 0 ; a[1] < 5 ; a[1]++)
for(a[2] = 0 ; a[2] < 5 ; a[2]++)
for(a[3] = 0 ; a[3] < 5 ; a[3]++)
for(a[4] = 0 ; a[4] < 5 ; a[4]++)
for(a[5] = 0 ; a[5] < 5 ; a[5]++)
for(a[6] = 0 ; a[6] < 5 ; a[6]++)
for(a[7] = 0 ; a[7] < 5 ; a[7]++)
for(a[8] = 0 ; a[8] < 5 ; a[8]++)
for(a[9] = 0 ; a[9] < 5 ; a[9]++)
for(a[10] = 0 ; a[10] < 5 ; a[10]++)
for(a[11] = 0 ; a[11] < 5 ; a[11]++)
for(a[12] = 0 ; a[12] < 5 ; a[12]++) {
if(a[0]+a[1]+a[2]+a[3]+a[4]+a[5]+a[6]+a[7]+a[8]+a[9]+a[10]+a[11]+a[12]==13) {
count++;
}
}
System.out.println(count);
}
方法二:遞回演算法
每種牌的數量有0,1,2,3,4五種情況,利用這點進行遞回運算
參考代碼
public class Main {
static int count=0;
public static void main(String[] args) {
f(0,0);
System.out.println(count);
}
/*
* num為牌的點數,k為手牌數
*/
private static void f(int num, int k) {
if(num>13||k>13)
return;//牌數或點數大于13結束
if(num==13&&k==13) {
count++;
return;
}
for(int i=0;i<5;i++) {
f(num+1, k+i);
}
}
}
答案

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/260100.html
標籤:其他
