本文共 755 字,大约阅读时间需要 2 分钟。
从m个数中随机取出n个数,有多少种组合(忽略顺序)。即Cmn,m为下标,n为上标。
公式Cmn = m!/n!/(m-n)!
从公式中可以看出实际上就是计算一个数的阶乘,阶乘计算出来了,就是个除法的运算而已。
代码如下:
/** * 求排列组合 * m为下标, n为上标 * 结果是m!/n!/(m-n)! */ public static double Cmn(int m, int n){ return devide(devide(recurrence(m), recurrence(n)).doubleValue(), recurrence(m-n)).doubleValue(); } /** * 递归计算一个数的阶乘 * @param num * @return */ public static double recurrence(int num){ if(num<=1) return 1; else return num*recurrence(num-1); } /** * 计算m/n * @param m * @param n * @return */ public static BigDecimal devide(double m, double n){ return BigDecimal.valueOf(m).divide(BigDecimal.valueOf(n),2, BigDecimal.ROUND_HALF_UP); }
转载地址:http://hqcdi.baihongyu.com/