首页 > 代码库 > n全排列输出和 n个数的组合(数字范围a~b)
n全排列输出和 n个数的组合(数字范围a~b)
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; }
n个数的组合(数字范围st~en),考虑反复元素:
int Wpermutation(int st, int en, int n, bool bRepeat);
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)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。