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

C語言排列組合:1~4 數字組成多少個不重複三位數

     編輯:關於C

問題分析

從 {1,2,3,4} 中選取 3 個**不重複**數字組成三位數,屬於**排列問題**:$P(4,3) = 4 \times 3 \times 2 = 24$ 種。

三層迴圈暴力法

#include 

int 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;
}

遞迴/回溯通用排列生成

#include 

void 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;
}

組合 vs 排列公式速查

類型公式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 個** 三位數。

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