給定M個整數,輸出所有的排列組合情況
阿新 • • 發佈:2021-03-16
//程式思想:每次兩個數兩兩交換,輸出一組結果,再換回去成為原始的順序 //遞迴思想:對m個數排列組合可拆解為固定最後一個數,對前m-1個排列組合,然後讓第1個數與第m個數交換位置 #include <stdio.h> #define MAX 20 int c[MAX] = {0}; int M, N ; void print(); void comp(int); int main() { int i; printf("Please input M = "); scanf("%d", &M); printf("M = %d\n", M); //對M個整數進行初始化 for(i = 0;i < M;i++) scanf("%d",c+i); comp(M); return 0; } void print() { int i; for (i = 0; i < M; i++) { printf("%d", c[i]); } printf("\n"); } void comp(int m) { int i,temp; if (m == 1) { print(); return; } comp(m - 1); for (i = 0;i < m-1; i++) { temp = c[i];//交換兩個數,並輸出結果 c[i] = c[m-1]; c[m-1] = temp; comp(m-1); //將兩個數交換回去,再接著迴圈 c[m-1] =c[i]; c[i] = temp; } }
執行結果: