牌面種類
小明被劫持到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天 百萬富翁很高興,欣然接受拉這個契約.請編寫乙個程式計算這乙個月中陌生人...