首页 > 代码库 > 全组合
全组合
输入n个数,求这n个数构成的集合的所有自己
3
1 2 3
输出
1
1 2
1 2 3
1 3
2
2 3
3
#include<cstdio>#include<cstring>using namespace std;const int maxn = 100;int n,m;int rcd[maxn],num[maxn],vis[maxn];int read_input(){ if(scanf("%d",&n)==EOF) return 0; for(int i=0;i<n;i++) scanf("%d",&num[i]); return 1;}void full_combination(int l,int p){ for(int i=0;i<l;i++){ printf("%d",rcd[i]); if(i<m-1) printf(" "); } printf("\n"); for(int i=p;i<n;i++){ rcd[l]=num[i]; full_combination(l+1,i+1); }}int main() { while(read_input()){ full_combination(0,0); } return 0;}
用向量表示
#include<cstdio>#include<string.h>using namespace std;const int MAXN = 1000;int vis[MAXN],num[MAXN],rcd[MAXN];int n;int input(){ if(scanf("%d",&n)!=1) return 0; for(int i=0;i<n;i++) scanf("%d",&num[i]); memset(vis,0,sizeof(vis)); return 1;}void print_subset(int p){ if(p==n){ for(int i=0;i<p;i++) if(vis[i]) printf("%d ",num[i]); printf("\n"); return ; } vis[p]=1; print_subset(p+1); vis[p]=0; print_subset(p+1);}int main(){ while(input()) print_subset(0); return 0;}
用位运算表示
#include<cstdio>#include<string.h>using namespace std;const int maxn =100 ;int num[maxn];void print_subset(int n,int s){ for(int i=0;i<n;i++) if(s&(1<<i)) printf("%d ",num[i]); printf("\n");}int main(){ int n; while(scanf("%d",&n)==1) { for(int i=0;i<n;i++) scanf("%d",&num[i]); for(int i=0;i<(1<<n);i++) print_subset(n,i); } return 0;}
全组合
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。