給定 n 個不同數字 (1~n),組成多少個互不相同的三位數?並列印它們。
#include <stdio.h>
int main() {
int n;
printf("輸入 n (1-9): ");
scanf("%d", &n);
if (n < 3) { puts("無法組成三位數"); return 0; }
int count = 0;
for (int i = 1; i <= n; ++i)
for (int j = 1; j <= n; ++j)
for (int k = 1; k <= n; ++k)
if (i != j && i != k && j != k) {
int num = i*100 + j*10 + k;
printf("%d ", num);
++count;
}
printf("\n總數: %d\n", count);
return 0;
}
排列數 P(n,3) = n * (n-1) * (n-2)。
例:n=4 → 4*3*2=24 個。
void permute(int *pool, int n, int *cur, int depth, int *cnt) {
if (depth == 3) {
int num = cur[0]*100 + cur[1]*10 + cur[2];
printf("%d ", num); (*cnt)++; return;
}
for (int i = 0; i < n; ++i) {
int used = 0;
for (int d = 0; d < depth; ++d) if (cur[d] == pool[i]) { used = 1; break; }
if (!used) { cur[depth] = pool[i]; permute(pool, n, cur, depth+1, cnt); }
}
}
i!=j && i!=k && j!=k 過濾重複。