第六屆藍橋杯B組 7 牌型總數

2021-07-14 15:27:16 字數 1170 閱讀 9451

題目:

牌型種數:

小明被劫持到x賭城,被迫與其他3人玩牌。

一副撲克牌(去掉大小王牌,共52張),均勻發給4個人,每個人13張。

這時,小明腦子裡突然冒出乙個問題:

如果不考慮花色,只考慮點數,也不考慮自己得到的牌的先後順序,自己手裡能拿到的初始牌型組合一共有多少種呢?

請填寫該整數,不要填寫任何多餘的內容或說明文字。

【分析】:說白了就是1~13種數字,每一種有四張,從這52張選13張,不在乎順序。(突然想說乙個題外話,這種數字排列的題還挺常出現的,但一般不會簡單的讓你排列1~n之類,通常會搞點小技巧,要麼就是1~n中有幾個數的位置固定,排列其它位置的數;要麼就是1~n個數中排m(m<=n)個數就行了;還有就是上面的這種有重複的部分。)

1.如果緊張的話,第一想到的應該是暴力乙個,直接14個迴圈,初始條件從0到4,代表這一種牌拿幾張,拿牌總數為13張就算一種方法。了解就好,懶得寫了。

2.第二種編寫方面簡單多了,就是來個遞迴,回溯。呼叫自身13次,每一次在遞迴的for迴圈裡選擇拿這種牌的個數,然後繼續呼叫。這個dfs方法大神並不陌生,但是想強調乙個重點,就是dfs中的這個for迴圈裡的呼叫完了之後,要返回原來狀態,即沒有拿這種牌的狀態!!!

#include 

int ans = 0, sum = 0;

void dfs(int cur)

else

} } int main()

3.在網上搜尋看到的,另乙個大神想到的是 動態規劃,這個真是我沒有想到的

假設牌是從1到13按順序取的,dp[i][j]表示取到第i號的牌,目前總共有j張牌的取法總數,那麼有狀態轉移方程(注意公式沒考慮邊界處理):

dp[i][j]=∑k=j−4jdp[i−1][k]

#include 

using namespace std;

typedef long long ll;

ll dp[14][14]; // dp[i][j]: 當前到第i張牌,總共有j張牌時的解的個數

int main()

}cout << dp[13][13] << endl;

return 0;

}

總之,這是道填空題 ,不管黑貓白貓,捉到jerry你才不是tom。 :)

第六屆藍橋杯 牌型種數

題目大意 52張去除大小鬼的撲克牌,問抽到的牌型有多少種 解題思路 做的時候思路還不夠清晰,要加油了,第九屆藍橋杯滿打滿算只剩39天了!本題可以暴力,要寫13個迴圈,太冗長。於是改用爆搜,從這13個牌型每次搜尋乙個牌型拿的張數,遞迴出口是把13種牌型選完從52張牌抽出13張的話次數就 1,本來用乙個...

第六屆藍橋杯 JavaA 牌型種數

牌型種數 小明被劫持到x賭城,被迫與其他3人玩牌。一副撲克牌 去掉大小王牌,共52張 均勻發給4個人,每個人13張。這時,小明腦子裡突然冒出乙個問題 如果不考慮花色,只考慮點數,也不考慮自己得到的牌的先後順序,自己手裡能拿到的初始牌型組合一共有多少種呢?請填寫該整數,不要填寫任何多餘的內容或說明文字...

第六屆藍橋杯省賽C B組 牌型種數

小明被劫持到x賭城,被迫與其他3人玩牌。一副撲克牌 去掉大小王牌,共52張 均勻發給4個人,每個人13張。這時,小明腦子裡突然冒出乙個問題 如果不考慮花色,只考慮點數,也不考慮自己得到的牌的先後順序,自己手裡能拿到的初始牌型組合一共有多少種呢?請填寫該整數,不要填寫任何多餘的內容或說明文字。首先我們...