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