2015蓝桥 牌型种数

7.小明被劫持到X赌城,被迫与其他3人玩牌。
一副扑克牌(去掉大小王牌,共52张),均匀发给4个人,每个人13张。
这时,小明脑子里突然冒出一个问题:
如果不考虑花色,只考虑点数,也不考虑自己得到的牌的先后顺序,自己手里能拿到的初始牌型组合一共有多少种呢?

请填写该整数,不要填写任何多余的内容或说明文字。

思路:递归,一张一张拿,一种一种挑

#include<stdio.h>
int ans=0;
void dfs(int n,int i)
{
	if(n==0){
		ans++;
		return ;
	}
	if(i>13||n<0)return ; //想挑第14种牌i<13,或者拿的牌超过了13张 n<0
	dfs(n,i+1); //第i种一张都不拿,挑下一种  
	dfs(n-1,i+1);//拿了一张,挑下一种 
	dfs(n-2,i+1);//拿了两张,挑下一种  
	dfs(n-3,i+1);//拿了三张,挑下一种 
	dfs(n-4,i+1);//拿了四张,挑下一种 
} 
int main()
{
	dfs(13,1);//我要拿13张牌,从第1种牌开始挑 
	printf("%d\n",ans);	
}    
    
答案: 3598180


 if(i>13||n<0)return ;这句话很重要

1.一开始我是这么写 if(i>=13)return; 这样就相当于第13种牌没有取,结果错误

2.修改后if(i>=13)return; 代码运行很慢,看了别人的代码后,添加了n<0的判断条件,因为当n<0的时候再递归也就没意义了

3.哎,一直不够细心,dfs(n,i+1)的情况没有写上

写题要自信,细心,加油


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值