第六届蓝桥杯 省赛第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);
}
}
小明被劫持到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);
}
}
相关文章推荐
- 第六届 蓝桥杯 c/c++ B组 省赛 (7)——牌型种数
- 第六届 蓝桥杯 c/c++ B组 省赛 (8)——移动距离
- 第六届 蓝桥杯 c/c++ B组 省赛 (3)——三羊献瑞
- 第六届 蓝桥杯 c/c++ B组 省赛 (6)——加法变乘法
- 第六届蓝桥杯JavaA组 第七题 牌型种数
- 第六届蓝桥杯C/C++B组第七题 牌型种数(回溯)
- 算法笔记_119:蓝桥杯第六届省赛(Java语言A组)试题解答
- 算法笔记_121:蓝桥杯第六届省赛(Java语言C组部分习题)试题解答
- 第六届 蓝桥杯 c/c++ B组 省赛 (4)——格子中输出
- 蓝桥杯第六届省赛JAVA真题----打印菱形
- 第六届 蓝桥杯 c/c++ B组 省赛 (1)——奖券数目
- 蓝桥杯第六届省赛JAVA真题----生命之树
- 第六届 蓝桥杯 c/c++ B组 省赛 (5)——九数组分数
- 蓝桥杯第六届省赛JAVA真题----循环节长度
- 算法笔记_120:蓝桥杯第六届省赛(Java语言B组部分习题)试题解答
- 第六届 蓝桥杯 c/c++ B组 省赛 (2)——星系炸弹
- 第六届蓝桥杯C++B组 牌型种数
- 第六届蓝桥杯软件类省赛-JAVA部分题目
- 第六届蓝桥杯A组C/C++ 第六题 牌型种数
- 2016第七届蓝桥杯C/C++ B组省赛第三题:凑算式