问题描述
小明被劫持到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;
}