蓝桥杯2015省赛07- 牌型种数

问题描述

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

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

输入

没有输入。

输出

输出一个整数。


分析:看到这个题我竟然第一选择是想全排列出来...想了一阵子突然发现为什么不用暴力循环呢?然后直接暴力循环出来了...后来网上搜了答案,看到了一个比较简洁的版本http://blog.csdn.net/w_t_y_y/article/details/61917177,附在后面。


public class CardCategory {
	//暴力搜索
	public static void main(String[] args) {
		int count = 0;
		for (int i = 0; i < 5; i++) {
			for (int j = 0; j < 5; j++) {
				for (int k = 0; k < 5; k++) {
					for (int l = 0; l < 5; l++) {
						for (int q = 0; q < 5; q++) {
							for (int w = 0; w < 5; w++) {
								for (int e = 0; e < 5; e++) {
									for (int r = 0; r < 5; r++) {
										for (int t = 0; t < 5; t++) {
											for (int y = 0; y < 5; y++) {
												for (int u = 0; u < 5; u++) {
													for (int o = 0; o < 5; o++) {
														for (int p = 0; p < 5; p++) {
															if (i + j + k + l + q + w + e + r + t + y + u + o + p == 13) {
																count ++;
															}
														}
													}
												}
											}
										}
									}
								}
							}
						}
					}
				}
			}
		}
		System.out.println(count);
	}
}
public class Main {
 2 
 3     public static void main(String[] args) {
 4         Solution s = new Solution();
 5         s.getResult(0, 0);
 6         System.out.println(s.num);
 7     }
 8 }
 9 
10 class Solution {
11     public int num = 0;
12     public void getResult(int curSum, int curStep) {
13         if(curStep == 13 || curSum > 13) {
14             if(curSum == 13)
15                 num++;
16         }
17         else {
18             for(int i = 0; i <= 4; i++) {
19                 getResult(curSum + i, curStep + 1);
20             }
21         }
22     }
23 }

ps:啥时候我才能写出这样的代码...


猜你喜欢

转载自blog.csdn.net/sinat_38617018/article/details/79532381