Java: 算法 - 1,2,3,4 取3个数组成三位数字,求能排列组合数量,并将它们打印出来

涉及数学公式:

A n m = n ! ( n m ) ! A^m_n=\frac{n!}{(n-m)!} (n个数取m个排列组合) permutation and combination
C n m = n ! m ! ( n m ) ! C^m_n=\frac{n!}{m!(n-m)!} (n个数取m个组合) combination

分析1,2,3,4取3个数字排列组合,应用数学公式 A 4 3 = 4 ! ( 4 3 ) ! A^3_4 = \frac{4!}{(4-3)!} = 24 种排列组合

1. 如果只求排列组合数量,可以直接使用数学公式

用代码表示:

public static long pnc(int n, int m){

	long numerator  = 1;
	for(;n>1;n--){
		numerator = numerator*n;
	}
	
	long denominator = 1;
	for(int i=n-m;i>1;i--){
		denominator = denominator*i;
	}
	
	return numerator/denominator;
}

测试:

public static void main(String args[]){
	System.out.println(pnc(4,3));
}

输出:

24

2. 打印的话,使用穷举法

代码:

public static void pnc(){
	long pnc = 0;
  	for(int i=1;i<=4;i++){
  		for(int j=1;j<=4;j++){
  			for(int k=1;k<=4;k++){
  				if(i!=j && i!=k && j!=k){
  					pnc++;
  					int num = i*100+j*10+k;
  					System.out.print(num + " "); 
  				}
  			}
  		}
  	}
	System.out.println("\n" + "Permutations and Combinations: "+ pnc ); 
}

if代码块可以用Stringbuffer写

if(i!=j && i!=k && j!=k){
	pnc++;
	StringBuffer num = new StringBuffer();
	num.append(i);
	num.append(j);
	num.append(k);
	num.append(" ");
	System.out.print(num);
}

测试:

public static void main(String args[]){
	pnc();
}

输出:

123 124 132 134 142 143 213 214 231 234 241 243 312 314 321 324 341 342 412 413 421 423 431 432
Permutations and Combinations: 24

猜你喜欢

转载自blog.csdn.net/OliverZang/article/details/84986277