給定 n 個不同的數字(1 到 n),能組成多少個互不相同的三位數?這是排列組合的基礎應用,也是 C 語言巢狀迴圈的經典練習。
#include <stdio.h>
#include <stdlib.h>
int main() {
int i, j, k;
int count = 0, n = 0;
printf("請輸入數字個數(1-9): ");
scanf("%d", &n);
// 輸入驗證
if (n < 3 || n > 9) {
printf("輸入範圍錯誤,需為 3 到 9 之間的整數\n");
return 1;
}
printf("所有可能的三位數:\n");
for (i = 1; i <= n; i++) {
for (j = 1; j <= n; j++) {
for (k = 1; k <= n; k++) {
// 確保三個數字互不相同
if (i != j && j != k && i != k) {
int num = i * 100 + j * 10 + k;
printf("%d ", num);
count++;
}
}
}
}
printf("\n總共可以組成 %d 個不同的三位數\n", count);
system("pause");
return 0;
}
數學公式驗證
這是排列數 P(n,3) = n × (n-1) × (n-2) 的問題。例如 n=4 時,應為 4×3×2=24 個。
程式邏輯
三層巢狀迴圈分別代表百位、十位、個位。關鍵在於 if (i != j && j != k && i != k) 確保三位數字互不重複。
getchar()若允許數字重複(如 111, 112...),總數為 n³ 個。若包含 0 但百位不能為 0,則需額外處理邊界條件。