问题描述
小明被劫持到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:啥时候我才能写出这样的代码...