五十道程式設計小題目 --- 11 排列與組合(階乘) java
阿新 • • 發佈:2019-01-05
輸出結果:package wn.comeOn.java.test.arithmetic50; import java.util.ArrayList; public class Arrangement { // 階乘 public static int factorial(int n) { if (n == 0 || n == 1) { return 1; } for (int i = 0; i < n; i++) { return n * factorial(--n); } return 0; } // 排列: public static int arrangement01(int n, int m) { return factorial(n) / factorial(n - m); } // 組合: public static int arrangement02(int n, int m) { return factorial(n) / (factorial(m) * factorial(n - m)); } // 有1、2、3、4個數字,全排列,三位數,都是多少? public static void arrange01() { int i = 0; // 儲存百位上的數 int j = 0; // 儲存十位上的數 int k = 0; // 儲存各位上的數 int count = 0; for (i = 1; i <= 4; i++) { for (j = 1; j <= 4; j++) { for (k = 1; k <= 4; k++) { if (i != j && j != k && i != k) { System.out.println(++count + ":" + (i * 100 + j * 10 + k)); } } } } } // 有1、2、3、4個數字,組合,都是多少? public static void arrange02() { int i = 0; // 儲存百位上的數 int j = 0; // 儲存十位上的數 int k = 0; // 儲存各位上的數 int count = 0; ArrayList<Integer> arr = new ArrayList<>(); for (i = 1; i <= 2; i++) { for (j = 2; j <= 3; j++) { for (k = 3; k <= 4; k++) { if (i != j && j != k && i != k) { int tmp = i * 100 + j * 10 + k; arr.add(tmp); System.out.println(++count + ":" + tmp); } } } } } public static void main(String[] args) { // System.out.println("4的階乘為:" + factorial(4)); System.out.println("4個數字,能組成" + arrangement01(4, 3) + "個互不相同且無重複數字的3位數"); System.out.println("排列:" + arrangement01(4, 3)); arrange01(); System.out.println(); System.out.println("組合:" + arrangement02(4, 3)); arrange02(); } }
4個數字,能組成24個互不相同且無重複數字的3位數
排列:24
1:123
2:124
3:132
4:134
5:142
6:143
7:213
8:214
9:231
10:234
11:241
12:243
13:312
14:314
15:321
16:324
17:341
18:342
19:412
20:413
21:421
22:423
23:431
24:432
組合:4
1:123
2:124
3:134
4:234