zoukankan      html  css  js  c++  java
  • 全组合

    输入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("
    ");
    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("
    ");
    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("
    ");
    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
  • 相关阅读:
    第一个自己独立开发并发布的软件
    第一个JavaWeb项目体验
    今天开博
    Mongoid Paging and Iterating Over Large Collections
    图片格式瞎扯淡
    是时候用Coffeescript了
    Mac 小技巧
    印度见闻札记
    作为开发人员,您应该尊重默认行为
    Java 注解(Annoation)学习笔记
  • 原文地址:https://www.cnblogs.com/hnuicpc0212/p/3163569.html
Copyright © 2011-2022 走看看