您的位置:首页 > 编程语言 > C语言/C++

第六届蓝桥杯 省赛第7题牌型种数(C++ JAVA)

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

答案:3598180

方法一:13个for循环
方法二:dfs
C++版:#include <iostream>
#include <iomanip>
#include <algorithm>
#include <set>
#include <map>
#include <stack>
#include <vector>
#include <cmath>
#include <string>
#include <queue>
#include <cstring>
#include <cstdio>
#define INF 0x3f3f3f3f
#define MAXSIZE 100
typedef long long ll;
using namespace std;
int ans = 0;

void dfs(int x,int sum){
if(sum > 13 || x > 13)
return ;
else if(sum==13){
ans++;
}else{
dfs(x+1,sum+0);//不取
dfs(x+1,sum+1);//取1
dfs(x+1,sum+2);//取2
dfs(x+1,sum+3);//取3
dfs(x+1,sum+4);//取4
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
dfs(0,0);
cout<<ans;
return 0;
}

JAVA版:import java.util.*;

public class Main {
static int ans=0;
public static void dfs(int x,int sum){
if(sum>13 || x>13){
return;
}else if(sum==13){
ans++;
}else{
for(int i=0;i<=4;i++){
dfs(x+1,sum+i);
}
}
}
public static void main(String[] args) {
dfs(0,0);
System.out.println(ans);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: