從 {1,2,3,4} 中選取 3 個**不重複**數字組成三位數,屬於**排列問題**:$P(4,3) = 4 \times 3 \times 2 = 24$ 種。
#includeint main() { int count = 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) { int num = i*100 + j*10 + k; printf("%5d", num); count++; } } printf("\nTotal: %d\n", count); // 24 return 0; }
#includevoid permute(int *arr, int n, int *used, int *cur, int depth, int r) { if (depth == r) { for (int i = 0; i < r; i++) printf("%d", cur[i]); printf(" "); return; } for (int i = 0; i < n; i++) { if (!used[i]) { used[i] = 1; cur[depth] = arr[i]; permute(arr, n, used, cur, depth+1, r); used[i] = 0; } } } int main() { int arr[] = {1,2,3,4}; int used[4] = {0}, cur[3]; permute(arr, 4, used, cur, 0, 3); return 0; }
| 類型 | 公式 | C(4,3) | P(4,3) |
|---|---|---|---|
| 組合(不考慮順序) | $C(n,r) = \frac{n!}{r!(n-r)!}$ | 4 | - |
| 排列(考慮順序) | $P(n,r) = \frac{n!}{(n-r)!}$ | - | 24 |
三層迴圈適合固定小規模(n≤10),回溯法適用於通用排列組合生成。本題答案為 **24 個** 三位數。