针对较大基数的排列组合算法Java实现类(n选m)
package com.utils; import java.math.BigDecimal;
import java.math.RoundingMode; public class PLZUUtils { public static BigDecimal computePaiLie(int n, int m) {
if(m > n || n < 0 || m < 0) {
throw new IllegalArgumentException("n必须大于m!");
}
return computerJC(n).divide(computerJC(n - m), 1, RoundingMode.HALF_UP);
} public static BigDecimal computeZuhe(int n, int m) {
if(m > n || n < 0 || m < 0) {
throw new IllegalArgumentException("n必须大于m!");
}
//=n!/m!(n-m)! return computerJC(n).divide((computerJC(m).multiply(computerJC(n - m)).setScale(1, RoundingMode.HALF_UP)), 1, RoundingMode.HALF_UP);
} public static BigDecimal computerJC(int n) {
if(n < 0) {
throw new IllegalArgumentException("n不能为负数!");
} else if(n == 0) {
return new BigDecimal(1);
}
BigDecimal bd = new BigDecimal(1.0);
for(int i=n; i>=1; i--) {
bd = bd.multiply(new BigDecimal(i)).setScale(1, RoundingMode.HALF_UP);
}
return bd;
} public static void main(String[] args) {
BigDecimal zh = computeZuhe(462, 442);
System.out.println(zh.doubleValue());
} }
针对较大基数的排列组合算法Java实现类(n选m)的更多相关文章
- 排列组合算法(PHP)
用php实现的排列组合算法.使用递归算法,效率低,胜在简单易懂.可对付元素不多的情况. //从$input数组中取$m个数的组合算法 function comb($input, $m) { if($m ...
- C#语法灵活运用之排列组合算法
今天群里有朋友求一个排列组合算法,题目是给定长度,输出所有指定字母的组合. 如指定字母a.b.c.d.e.f,长度为2,则结果应为:aa.ab.ac ... ef.ff. 有朋友给出算法,很有特色: ...
- python实现高效率的排列组合算法-乾颐堂
组合算法 本程序的思路是开一个数组,其下标表示1到m个数,数组元素的值为1表示其下标 代表的数被选中,为0则没选中. 首先初始化,将数组前n个元素置1,表示第一个组合为前n个数. 然后从左到右扫描数组 ...
- 排列组合算法的Java实现
转载于:http://cgs1999.iteye.com/blog/2327664
- 代码实现排列组合【Java】
一.代码实现 package zhen; import java.util.Arrays; public class Arrangement { /** * 计算阶乘数,即n! = n * (n-1) ...
- 排列组合算法的javascript实现
命题:从成员数为N的集合S中,选出M个元素,分别求其排列与组合结果集,即 A(N, M)与C(N, M) js解法: function queue(arr, size){ if(size > a ...
- 排列组合算法(基于c++实现)
排列 全排列是将一组数按一定顺序进行排列,如果这组数有n个,那么全排列数为n!个.现以{1, 2, 3}为例说明如何编写全排列的递归算法 第一层S1表示第一个数分别与第1.2.3个数交换位置,如123 ...
- c语言中一种典型的排列组合算法
c语言中的全排列算法和组合数算法在实际问题中应用非常之广,但算法有许许多多,而我个人认为方法不必记太多,最好只记熟一种即可,一招鲜亦可吃遍天 全排列: #include<stdio.h> ...
- C(n,m)排列组合算法
主要解决C(n,m)问题 static class Extension { public static IList<IList<T>> GetGroup<T>(th ...
随机推荐
- ubuntu14.04显卡驱动问题(amd5600k集显7650d)
安装ubuntu的时候,多次莫名其妙地黑屏,起初以为是最新得ubuntu14.04安装包不稳定,所以一直尝试了很多次. 重启-->安装-->黑屏(硬盘仍在转动,屏幕上什么都没有)--> ...
- Python自动化之面向对象进阶
1 静态方法 静态方法是不可以访问实例变量或类变量的,一个不能访问实例变量和类变量的方法,其实相当于跟类本身已经没什么关系了,它与类唯一的关联就是需要通过类名来调用这个方法. class Dog(ob ...
- leetcode:32 最长有效括号
题目: 给一个包含了'(' 和 ')'的字符串,求出其中最长有效括号的长度. 做题情况:自己做出来,但做了较长的时间. 思路:可以算得穷举法的时间复杂度为O(n^3).虽然这题求的是最长的长度,但是 ...
- python 内置速度最快算法(堆排)
import random import time from heapq import heappush, heappop def heapsort(iterable): h = [] for val ...
- 循环(loop), 递归(recursion), 遍历(traversal), 迭代(iterate)的区别
表示“重复”这个含义的词有很多, 比如循环(loop), 递归(recursion), 遍历(traversal), 迭代(iterate). 循环算是最基础的概念, 凡是重复执行一段代码, 都可以称 ...
- hadoop初识
搞什么东西之前,第一步是要知道What(是什么),然后是Why(为什么),最后才是How(怎么做).但很多开发的朋友在做了多年项目以后,都习惯是先How,然后What,最后才是Why,这样只会让自己变 ...
- 新建samba配置步骤
Linux系统默认已经安装了Samba,但是没有安装Samba服务: 1,先查看安装情况:rpm -qa|grep samba 根据系统的安装情况选择下载或者通过光驱安装所缺的rpm包. 我的安装情况 ...
- Unity3d 怪物死亡燃烧掉效果
效果 BurnToFadeOut.shader代码 Shader "BurnToFadeOut" { Properties { _StartColor ("Start C ...
- MongoDB 查询优化分析
摘要: 在MySQL中,慢查询日志是经常作为我们优化查询的依据,那在MongoDB中是否有类似的功能呢?答案是肯定的,那就是开启Profiling功能.该工具在运行的实例上收集有关MongoDB的写操 ...
- 8.SpringMVC参数传递
页面参数传递到controller, 可被同名(与页面标签上的name名对应)的参数接收,用request设值,页面再取出来. 注意乱码解决办法: ①如果是get提交,则在tomcat的server. ...