牌型种数
题目描述:
小明被劫持到X赌城,被迫与其他3人玩牌。 一副扑克牌(去掉大小王牌,共52张),均匀发给4个人,每个人13张。 这时,小明脑子里突然冒出一个问题: 如果不考虑花色,只考虑点数,也不考虑自己得到的牌的先后顺序,自己手里能拿到的初始牌型组合一共有多少种呢?
答案:
3598180
思路:
这道题用递归计数,设置两个参数,num代表点数,n代表拿牌数量,递归拿某个点数的牌数0,1,2,3,4张,当n=13时,sum++即可。
代码如下附上:
import java.beans.beancontext.BeanContext;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.GregorianCalendar;
import java.util.Scanner;
import java.util.function.IntToDoubleFunction;
import javax.print.attribute.Size2DSyntax;
import javax.security.auth.x500.X500Principal;
import javax.swing.text.Highlighter;
import javax.xml.crypto.Data;
import org.omg.PortableServer.ID_ASSIGNMENT_POLICY_ID;
public class Main{
static int sum = 0;
public static void fun(int num , int n) {
if(num > 13)
return ;
if(n >= 13)
{
if(n == 13)
sum++;
return ;
}
fun(num + 1, n);
fun(num + 1, n + 1);
fun(num + 1, n + 2);
fun(num + 1, n + 3);
fun(num + 1, n + 4);
}
public static void main(String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
Scanner sc = new Scanner(System.in);
fun(0, 0);
System.out.println(sum);
}
}