問題描述
小明被劫持到X賭城,被迫與其他3人玩牌。
一副撲克牌(去掉大小王牌,共52張),均勻發給4個人,每個人13張。
這時,小明腦子裡突然冒出一個問題:
如果不考慮花色,隻考慮點數,也不考慮自己得到的牌的先後順序
自己手裡能拿到的初始牌型組合一共有多少種呢?
輸出
請輸出該整數,不要輸出任何多餘的内容或說明文字。
思路
遞歸,從A到K選個數,個數選到13時候,總數加一
代碼
#include<bits/stdc++.h>
using namespace std;
//心得:flag==true 是比較,flag=true 是指派 注意等号的個數
//遞歸思想:由于不論順序,是以假定從A開始選擇個數(0~4)直到 K(13)
int we=0;//we表示種類數
//n表示每次選擇的dian點的牌的數量
//dian表示牌的點數
//sum為13,即牌每個人發13張
void my(int n,int dian,int sum){
//cout<<"執行了一次遞歸"<<endl;
sum+=n;
if(sum==13){
we++;
sum=0;
return;
}else if(sum>13){
return;
}
if(dian==13){
return;
}
for(int i=0;i<=4;i++){
my(i,dian+1,sum);
}
return;
}
int main(){
int sum=0;//牌數=13
int dian=0;//點數<=13
my(0,dian,sum);
cout<<we<<endl;//自己電腦跑完出結果,然後oj平台直接輸出答案
//cout<<3598180<<endl;這個是最終的答案
return 0;
}