標籤:io for sp size on c return as print
n全排列輸出:
int WPermutation(int num, bool bRepeat)
num表示num全排列
bRepeat標誌是否產生重複元素的序列。
int Permutation(int n, int* A, int cur, bool bRepeat) {static int number = 0;if(cur == n){ number++;for(int i = 0; i< n; i++){printf("%d ", A[i]);}printf("\n");}else{for(int i = 1; i <= n; i++){int ok = 1;for(int j = 0; j < cur; j++) {if(!bRepeat){if(A[j] == i){ok = 0;}}}if(ok){A[cur] = i;Permutation(n, A, cur + 1, bRepeat);}}} return number;}int WPermutation(int num, bool bRepeat){printf("%d permutation(%s): %d ~ %d\n", num, bRepeat?"repeat mode":"single mode", 1, num);int n = num;int *A = (int*)malloc(n*sizeof(int));memset(A, 0, sizeof(n*sizeof(int)));int cur = 0;int number = Permutation(n, A, cur, bRepeat);delete [] A ;A = NULL;printf("over!\n");return number;}
int Wpermutation(int st, int en, int n, bool bRepeat);
n個數的組合(數字範圍st~en),考慮重複元素:
n表示n個數字組合
每個數字範圍:st~en
bRepeat標誌是否產生重複元素的序列。
int Permutation(int st, int en, int n, int* A, int cur, bool bRepeat){static int number = 0;if(cur == n){ number++;for(int i = 0; i< n; i++){printf("%d ", A[i]);}printf("\n");}else{for(int i = st; i <= en; i++){int ok = 1;for(int j = 0; j < cur; j++){if(!bRepeat){if(A[j] == i){ok = 0;}}}if(ok){A[cur] = i;Permutation(st, en, n, A, cur + 1, bRepeat);}}}return number;}int Wpermutation(int st, int en, int n, bool bRepeat){printf("%d permutation(%s): %d ~ %d\n", n, bRepeat?"repeat mode":"single mode", st, en);int num = en - st + 1;if(n > num){bRepeat = true;printf("too many number, to be repeat mode:\n");}int *A = (int*)malloc(n*sizeof(int));memset(A, 0, sizeof(n*sizeof(int)));int cur = 0;int number = Permutation(st, en, n, A, cur, bRepeat);delete [] A ;A = NULL;printf("over!\n");return number;}
n全排列輸出和 n個數的組合(數字範圍a~b)