java算法 牌型种数

牌型种数


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

一、暴力破解

public class Main {
	public static void main(String[] args) {
		int[] a = new int[13];
		int count = 0;
		for (a[0] = 0; a[0] <= 4; a[0]++)
			for (a[1] = 0; a[1] <= 4; a[1]++)
				for (a[2] = 0; a[2] <= 4; a[2]++)
					for (a[3] = 0; a[3] <= 4; a[3]++)
						for (a[4] = 0; a[4] <= 4; a[4]++)
							for (a[5] = 0; a[5] <= 4; a[5]++)
								for (a[6] = 0; a[6] <= 4; a[6]++)
									for (a[7] = 0; a[7] <= 4; a[7]++)
										for (a[8] = 0; a[8] <= 4; a[8]++)
											for (a[9] = 0; a[9] <= 4; a[9]++)
												for (a[10] = 0; a[10] <= 4; a[10]++)
													for (a[11] = 0; a[11] <= 4; a[11]++)
														for (a[12] = 0; a[12] <= 4; a[12]++) {
															if (a[0] + a[1] + a[2] + a[3] + a[4] + a[5] + a[6] + a[7]
																	+ a[8] + a[9] + a[10] + a[11] + a[12] == 13) {
																count++;
															}
														}

		System.out.println(count);
	}

}

  

二、递归

public class Test {
	public static int num = 0;
    public static void getResult(int type, int sum) {
        if(sum == 13 || type > 13) {
            if(type == 13)
                num++;
        }
        else {
            for(int i = 0; i <= 4; i++) {
                getResult(type + i, sum + 1);
            }
        }
    }

    public static void main(String[] args) {
        getResult(0, 0);
        System.out.println(num);
    }
}

  

posted @ 2018-01-24 16:58  谨言&慎独_yk  阅读(367)  评论(0编辑  收藏  举报