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

C語言全排列應用:從 1,2,3,4 組成不重複三位數

     編輯:關於C

問題

數字 {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;
        }
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved