蓝桥杯 牌型种数 (dfs)--------------------Five-菜鸟级

2022-11-21 15:50:39 浏览数 (1)

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

思路:比较简单  用dfs  或则 13层for 循环 就好了 

一共是52张牌,不算花色的话就是13种类型,我用0~12来编号。 就想着 所有牌按顺序排好等你去取

                  0     1    2     3     4     5    6    7   8    9   10   11    12 

                                          0     1    2     3     4     5    6    7   8    9   10   11    12 

                                          0     1    2     3     4     5    6    7   8    9   10   11    12 

                                          0     1    2     3     4     5    6    7   8    9   10   11    12

  入口 (这里开始,也就是第0层)

           然后开始拿 牌  拿牌 无非就是 拿 或者不拿 如果拿 你想拿几张。            当你在第num层的时候 你有 5 个选择 拿0张 (不拿) 拿1张  拿2张 拿3张 拿4张                                                                 (当然这是在满足一定条件下的,条件就是 你牌未拿满13张 )

 看代码吧 有解释  这就是暴力的dfs   结果:3598180

代码语言:javascript复制
#include<stdio.h>
 int res=0;
 void dfs(int num,int count){
 // num 代表 取牌的数值 0~12 分别代表13张牌 count代表 你手中的牌  
 	   if(count>13||num>13)return;
		//退出条件 你拿到的牌超过了13张 或则 你拿到的牌的数值超过了13 
 	   if(count==13) res  ;//在满足条件的情况下 拿到牌刚好13 张 算一种方案  
 	   else{
 	       for(int i=0;i<=4;i  )
			// 每一个数值的牌你取到的可能情况有  0(没取这个数值的牌)  1(取了一张) 2 3 4 
 	    	 dfs(num 1,count i);
		  // num 1 这种情况 考虑完了 考虑下个数值的牌 count i 你手上多了 i 张 数值为 num的牌 
 	    }
 	
 }
 int main()
 {
   dfs(0,0);// 刚开始 获得了0张牌 
   printf("%dn",res);
   return 0;
 } 
dfs

0 人点赞