首頁  >  文章  >  Java  >  Java中組合排列問題解決方法

Java中組合排列問題解決方法

高洛峰
高洛峰原創
2017-03-09 18:58:111343瀏覽

這篇文章介紹Java中組合排列問題解決方法

1.

從4個人中選2個人參加活動,一共有6種選法。 

從n個人中選m個人參加活動,共有多少種選法?

C(m/n)=C((m-1)/(n-1))+C(m/(n-1))數學演算法


#
public class Main {	
	public static void main(String[] args) {
		System.out.println("请输入总人数:");
		Scanner sc=new Scanner(System.in);
		int n=sc.nextInt();
		System.out.println("请输入选择人数:");
		int m=sc.nextInt();
		System.out.println("一共有"+fun(n,m)+"种方法!");
	}	
	private static int fun(int n, int m) {		
		if(m>n)return 0;		
		if(m==0)return 1; 		
		return fun(n-1,m-1) + fun(n-1,m);
	}
}

2.

計算3個A,2個B可以組成多少種排列的問題(如:AAABB, AABBA)是《組合數學》的研究領域 

。但有些情況下,也可以利用計算機計算速度快的特點透過巧妙的推理來解決問題。 

下列的程式計算了m個A,n個B可以組合成多少個不同排列的問題。請完善它。

A(n/m)=A(n/(m-1))+A((n-1)/m)


#
public class Main {
	public static void main(String[] args) {
		int m=3;
		int n=2;
		System.out.println(pailie(m, n));
	}
	public static int pailie(int m,int n){	
		if (m==0||n==0)return 1;	
		return pailie(m-1,n)+pailie(m, n-1); 
	}
}

方法2

public class Main {
	public static void main(String[] args) {
		char[] date="ABC".toCharArray();
		f(date,0);
	}
	private static void f(char[] date, int k) {	
		if (k==date.length) {
			for (int i = 0; i < date.length; i++) {
				System.out.print(date[i]+" ");
			}
			System.out.println();
		}	
		for (int i = k; i < date.length; i++) {
			{char t=date[k];date[k]=date[i];date[i]=t;}//试探		
			f(date,k+1);		
			{char t=date[k];date[k]=date[i];date[i]=t;}//回溯
		}	
	}
}

#

以上是Java中組合排列問題解決方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn