首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> 關於C

C語言實作:從n個不同數字組成多少個三位數

     編輯:關於C

排列組合經典題:三位數組合計算

給定 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) 確保三位數字互不重複。

優化方向

  • 避免重複判斷:可在第二層迴圈開始就跳過已用數字
  • 輸出格式控制:每行固定顯示幾個數字,提升可讀性
  • 移除 system("pause"):該函數僅限 Windows,跨平台建議用 getchar()

擴展思考

若允許數字重複(如 111, 112...),總數為 n³ 個。若包含 0 但百位不能為 0,則需額外處理邊界條件。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved