全组合

输入n个数,求这n个数构成的集合的所有自己

3

1 2 3

输出

1

1 2

1 2 3

1 3

2

2 3

3

代码:

 1 #include<cstdio>
 2 #include<cstring>
 3 using namespace std;
 4 const int maxn = 100;
 5 
 6 int n,m;
 7 int rcd[maxn],num[maxn],vis[maxn];
 8 
 9 int read_input(){
10 
11    if(scanf("%d",&n)==EOF)
12         return 0;
13     for(int i=0;i<n;i++)
14         scanf("%d",&num[i]);
15     return 1;
16 }
17 
18 void full_combination(int l,int p){
19 
20         for(int i=0;i<l;i++){
21             printf("%d",rcd[i]);
22         if(i<m-1)
23             printf(" ");
24         }
25         printf("\n");
26 
27 
28     for(int i=p;i<n;i++){
29         rcd[l]=num[i];
30         full_combination(l+1,i+1);
31 
32     }
33 }
34 int main() {
35     while(read_input()){
36 
37         full_combination(0,0);
38 
39     }
40 
41     return 0;
42 }
View Code

用向量表示

 1 #include<cstdio>
 2 #include<string.h>
 3 using namespace std;
 4 const int MAXN = 1000;
 5 int vis[MAXN],num[MAXN],rcd[MAXN];
 6 int n;
 7 int input(){
 8     if(scanf("%d",&n)!=1)
 9         return 0;
10     for(int i=0;i<n;i++)
11         scanf("%d",&num[i]);
12     memset(vis,0,sizeof(vis));
13     return 1;
14 }
15 void print_subset(int p){
16         if(p==n){
17             for(int i=0;i<p;i++)
18             if(vis[i])
19                 printf("%d ",num[i]);
20         printf("\n");
21         return ;
22         }
23 
24         vis[p]=1;
25         print_subset(p+1);
26         vis[p]=0;
27         print_subset(p+1);
28 
29 
30 }
31 int main(){
32     while(input())
33         print_subset(0);
34     return 0;
35 }
View Code

用位运算表示

 1 #include<cstdio>
 2 #include<string.h>
 3 using namespace std;
 4 const int maxn =100 ;
 5 int num[maxn];
 6 
 7 void print_subset(int n,int s){
 8     for(int i=0;i<n;i++)
 9         if(s&(1<<i))
10             printf("%d ",num[i]);
11     printf("\n");
12 }
13 int main(){
14     int n;
15     while(scanf("%d",&n)==1)
16     {
17         for(int i=0;i<n;i++)
18             scanf("%d",&num[i]);
19         for(int i=0;i<(1<<n);i++)
20         print_subset(n,i);
21     }
22     return 0;
23 }
View Code

 

 

 

 

posted on 2013-06-30 14:50  the unkown road  阅读(149)  评论(0编辑  收藏  举报

导航