ホームページ >Java >&#&チュートリアル >Javaの組み合わせ配置問題の解決策

Javaの組み合わせ配置問題の解決策

高洛峰
高洛峰オリジナル
2017-03-09 18:58:111392ブラウズ

この記事では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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。