java求排列组合数

来源:互联网 发布:网络教研三剑客 编辑:程序博客网 时间:2024/05/19 16:48

1.排列数公式:
A(n,m)=n(n-1)(n-2)……(n-m+1)= n!/(n-m)!
2.组合数互补性质:如下图所示
组合数性质
即从m个不同元素中取出n个元素的组合数=从m个不同元素中取出(m-n)个元素的组合数;
运用互补性质可以简化组合数的计算量。

package com.lan.MathFunction;//求排列数组合数public class Test{//求排列数public static int A(int up,int bellow){int result=1;for(int i=up;i>0;i--){result*=bellow;bellow--;}return result;}//求组合数,这个也不需要了。定义式,不使用互补率public static int C2(int up,int below){//int denominator=factorial(up);//分母up的阶乘//分母int denominator=A(up,up);//A(6,6)就是求6*5*4*3*2*1,也就是求6的阶乘//分子int numerator=A(up,below);//分子的排列数return numerator/denominator;}public static int C(int up,int below)//应用组合数的互补率简化计算量{int helf=below/2;if(up>helf){System.out.print(up+"---->");up=below-up;System.out.print(up+"\n");}int denominator=A(up,up);//A(6,6)就是求6*5*4*3*2*1,也就是求6的阶乘//分子int numerator=A(up,below);//分子的排列数return numerator/denominator;}public static void main(String[] args){for(int i=1;i<=6;i++){System.out.println("A("+i+",6)="+A(i,6));}for(int i=1;i<=6;i++){System.out.println("C("+i+",6)="+C(i,6));}//int m=15/2;//int型会向前取整//System.out.println("m="+m);//m=7//for(int i=10;i<=20;i++)//{//m=i/2;//System.out.println("i="+i+",m="+m);//}System.out.println("C(5,6)="+C(5,6));//6}}
结果:

A(1,6)=6A(2,6)=30A(3,6)=120A(4,6)=360A(5,6)=720A(6,6)=720C(1,6)=6C(2,6)=15C(3,6)=204---->2C(4,6)=155---->1C(5,6)=66---->0C(6,6)=15---->1C(5,6)=6



原创粉丝点击