基礎演算法題 牌面種類(DFS回溯 思維)

2021-10-04 16:24:14 字數 1336 閱讀 1209

牌面種類

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

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

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

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

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

題目分析

從題目中可知,52張牌中,有13種型別的牌,每種型別的牌有4張。我們要從52張牌中抽取13張牌,計算這13張牌能有多少種組合,並且不考慮牌的先後順序。

這裡有兩種方案,都用有用到dfs,不同的是第一種是模擬抽牌,而第二種是直接排列。

模擬抽牌就好似乙個過程,要慢慢模擬出全部情況,而直接排列就像通過「暴力」的方式直接了當地得出答案。

模擬抽牌方案的時間複雜度:o(1313)很大,不能很快得出結果。

直接排列方案的時間複雜度:o(513)較小,很快能得出答案。

模擬抽牌:dfs回溯——每次抽牌只抽一張,記錄抽到牌的順序,排除抽到同類牌5次的情況。

#include

using namespace std;

int pai[13]

=;int path[13]

;int ans=0;

bool judge

(int

*path,

int tmp,

int k)

//判斷能不能抽

if(ans==4)

return false;

return true;

}void

dfs(

int k)

for(

int i=

0; i<

13; i++)}

}int

main()

直接排列:dfs——一種牌能抽0~4張,記錄抽牌次數及已抽到的牌數

#include

using namespace std;

int ans=0;

void

dfs(

int k,

int cnt)

//k:次數 cnt:牌數

for(

int i=

0; i<=

4; i++

)dfs

(k+1

, cnt+i);}

intmain()

總結

該題考查思維,將題中模擬轉換為數值排序的思維轉換。

多做題,才能熟能生巧。

2016屆藍橋杯牌型種類(dfs演算法)

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

阿里一面演算法題

123456 123,456 下面瞎寫的,正則題,想了下直接說的不會,正則得好好看看了 replace d g,看了下答案 str.replace b d b g,例如 str 1234 輸出結果為 1,234 b 匹配不是單詞開頭或者結束的位置 exp 匹配 exp 前面的位置 exp 匹配 ex...

基礎演算法題

1.一百萬富翁遇到一陌生人,陌生人找他談乙個換錢的計畫,計畫如下 我每天給你十萬,而你每天只需要給我一分錢,第二天我仍然給你十萬元,你給我二分錢,第三天我仍然給你十萬,你給我四分錢.你每天給我的錢是前天的兩倍,直到乙個月 30天 百萬富翁很高興,欣然接受拉這個契約.請編寫乙個程式計算這乙個月中陌生人...