數字 {1,2,3,4} 組成互不相同且無重複數字的三位數,共多少個?全部列出。
#include <stdio.h>
int main(void) {
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) {
printf("%d%d%d ", i, j, k);
++count;
}
printf("\n共 %d 個\n", count);
return 0;
}
123 124 132 134 142 143 213 214 231 234 241 243 312 314 321 324 341 342 412 413 421 423 431 432 共 24 個
驗證:P(4,3) = 4×3×2 = 24。
void permute(int *a, int n, int k, int *used, int *cur, int depth) {
if (depth == k) {
for (int i = 0; i < k; ++i) printf("%d", cur[i]);
puts("");
return;
}
for (int i = 0; i < n; ++i)
if (!used[i]) {
used[i] = 1;
cur[depth] = a[i];
permute(a, n, k, used, cur, depth+1);
used[i] = 0;
}
}