牌型种类 蓝桥杯

题目:

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

 

想法:  (也是参考别人的博客之后才...不过这种思想还是要有的,然后就造了一遍轮子)

题目一共52张牌,不分花色,即每种牌(A,1,2,3...J,Q,K)有四张,最后从中拿取13张的可能组合牌型。这个题要抽象化,就是每种牌有5种方式拿取,

即一张也没有拿到,拿到1张,拿到2张,拿到3张,拿到4张,五种可能。然后通过DFS来穷举每一种可能(就像搜索迷宫一样),即拿到13张牌就算一种牌型,进行累加便可。

当然拿牌张数大于等于13就是边界了。

 

注意:深搜时要控制好每次都会选择一张也没拿的情况,也就是0

 

参考代码:

#include <iostream>
#include <cstdio>

using namespace std;

long long ans; 
// cnt 计算已经拿取的张数
// k就是控制递归时,控制一直取0(也就是不拿)的情况 
void dfs(int cnt, int k) {
    if (cnt == 13) ans++;
    if (cnt >= 13 || k >= 13) return;
    
    for (int i = 0; i <= 4; i++)
        dfs(cnt+i, k+1);
}

int main( ) {
    ans = 0;
    // 初始化张数为0,拿的次数初始为0 
    dfs(0, 0);
    cout << ans << endl;
    return 0;
}

 

有不对的请多包涵

 

 

posted @ 2020-01-20 17:50  你若愿意,我一定去  阅读(258)  评论(0编辑  收藏  举报