小明被劫持到X賭城,被迫與其他3人玩牌。一副撲克牌(去掉大小王牌,共52張),均勻發給4個人,每個人13張。這時,小明腦子裡突然冒出一個問題:如果不考慮花色,隻考慮點數,也不考慮自己得到的牌的先後順序,自己手裡能拿到的初始牌型組合一共有多少種呢?
請填寫該整數,不要填寫任何多餘的内容或說明文字。
解法一:枚舉
#include <iostream>
using namespace std;
int a[14],sum=0;
int main()
{
for(a[1]=0;a[1]<=4;a[1]++)
for(a[2]=0;a[2]<=4;a[2]++)
for(a[3]=0;a[3]<=4;a[3]++)
for(a[4]=0;a[4]<=4;a[4]++)
for(a[5]=0;a[5]<=4;a[5]++)
for(a[6]=0;a[6]<=4;a[6]++)
for(a[7]=0;a[7]<=4;a[7]++)
for(a[8]=0;a[8]<=4;a[8]++)
for(a[9]=0;a[9]<=4;a[9]++)
for(a[10]=0;a[10]<=4;a[10]++)
for(a[11]=0;a[11]<=4;a[11]++)
for(a[12]=0;a[12]<=4;a[12]++)
for(a[13]=0;a[13]<=4;a[13]++){
if(a[1]+a[2]+a[3]+a[4]+a[5]+a[6]+a[7]+a[8]+a[9]+a[10]+a[11]+a[12]+a[13] == 13){
sum++;
}
}
cout<<sum<<endl;
return 0;
}
解法二:dfs
#include <iostream>
using namespace std;
int sum=0;
//目前是第i種牌,小明手裡有j張
void dfs(int i,int j){
if(i>13) return;
if(j>13) return;
if(j==13) {
sum++;
return;
}
dfs(i+1,j);
dfs(i+1,j+1);
dfs(i+1,j+2);
dfs(i+1,j+3);
dfs(i+1,j+4);
}
int main()
{
dfs(0,0);
cout<< sum <<endl;
return 0;
}