生成器
递归排列
#include<cstdio> #include<iostream> using namespace std; void print_permutation(int n, int a[], int cur) { if (cur == n) { for (int i = 0; i < 10; i++)cout << a[i]; cout << endl; return; } else { for (int i = 0; i < 10; i++) { int ok = 1; for (int j = 0; j < cur; j++) if (a[j] == i) ok = 0; if (ok) {a[cur] = i; print_permutation(n, a, cur + 1);} } } } int main(void) { int a[10]; for (int i = 0; i < 10; i++) a[i] = i; print_permutation(10, a, 0); return 0; }
#include<cstdio> #include<iostream> using namespace std; void print_permutation(int n, int a[], int s[], int cur) { //提前将原始数组排序 if (cur == n) { for (int i = 0; i < n; i++) cout << a[i]; cout << endl; return; } else { for (int i = 0; i < n; i++) if(!i||s[i]!=s[i-1]) { int c1 = 0, c2 = 0; for (int j = 0; j < cur; j++) { if (a[j] == s[i]) c1++; } for (int j = 0; j < n; j++) { if (s[j] == s[i])c2++; } if (c1 < c2) { a[cur] = s[i]; print_permutation(n, a, s, cur + 1); } } } } int main(void) { int s[3] = { 1,1,1 }; int a[3]; print_permutation(3, a, s, 0); return 0; }
子集生成器
#include<cstdio> #include<iostream> using namespace std; void print_subset(int n, int a[], int cur) { for (int i = 0; i < cur; i++) cout << a[i]; cout << endl; int s = cur ? a[cur - 1] + 1 : 0; for (int i = s; i < n; i++) { a[cur] = i; print_subset(n, a, cur + 1); } } int main(void) { int a[5]; print_subset(5, a, 0); return 0; }
#include<cstdio> #include<iostream> using namespace std; void print_subset(int n, int a[], int cur) { if (cur == n) { for (int i = 0; i < cur; i++) { if (a[i])printf("%d", i); } puts(""); return; } a[cur] = 1; print_subset(n, a, cur + 1); a[cur] = 0; print_subset(n, a, cur + 1); } int main(void) { int a[5]; print_subset(5, a, 0); return 0; }
二进制
#include<cstdio> #include<iostream> using namespace std; void print_subset(int n, int s) { //打印出s对应的各个元素 for (int i = 0; i < n; i++) if (s & (1 << i)) printf("%d", i); cout << endl; } int main(void) { int n; cin >> n; //print_subset(3, 7); //枚举子集 for (int i = 0; i < (1 << n); i++) print_subset(n, i); }
计算机小白记录学习过程,喜欢就点个推荐和关注吧O(∩_∩)O哈哈~

浙公网安备 33010602011771号