【蓝桥】牌型种数

牌型种数

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

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

答案:3598180

13种牌型每一个有0,1,2,3,4 这5种

方法一:
枚举,逐个排查

#include<iostream>
using namespace std;
int main()
{

		int count = 0;
		int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13;
		for (a1 = 0;a1 < 5;a1++)
			for (a2 = 0;a2 < 5;a2++)
				for (a3 = 0;a3 < 5;a3++)
					for (a4 = 0;a4 < 5;a4++)
						for (a5 = 0;a5 < 5;a5++)
							for (a6 = 0;a6 < 5;a6++)
								for (a7 = 0;a7 < 5;a7++)
									for (a8 = 0;a8 < 5;a8++)
										for (a9 = 0;a9 < 5;a9++)
											for (a10 = 0;a10 < 5;a10++)
												for (a11 = 0;a11 < 5;a11++)
													for (a12 = 0;a12 < 5;a12++)
														for (a13 = 0;a13 < 5;a13++)
															if (a1 + a2 + a3 + a4 + a5 + a6 + a7 + a8 + a9 + a10 + a11 + a12 + a13 == 13)count++;

		cout << count << endl;
		return 0;
}

方法二:

#include<iostream>
using namespace std;
int count= 0;//表示种数;
int sum = 0;//表示手里的牌数;

void pai(int n)
{
	if (sum > 13)//说明手里牌数已够;
		return;
	if (n == 14)//说明13种牌全部都排查过;
	{
		if (sum == 13)
			count++;
		return;
	}
	else
	{
		for (int i = 0;i <= 4;i++)
		{
			sum += i;
			pai(n + 1);//搜索下一个;
			sum -= i;//消除此次加的牌数;
		}
	}
}

int main()
{
	pai(1);//从第一种开始排查;
	cout << count<< endl;
	return 0;
}
发布了4 篇原创文章 · 获赞 0 · 访问量 107

猜你喜欢

转载自blog.csdn.net/weixin_44586237/article/details/100060974