• 全组合


    输入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("
    ");
    
    
        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("
    ");
            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("
    ");
    }
    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;
    }
    

      

    Knowing others is intelligence; Knowing yourself is true wisdom
  • 相关阅读:
    6. 复习complex类的实现过程
    英文文献写作注意事项
    5. 操作符重载与临时对象
    4. 参数传递与返回值
    3. 构造函数
    JSON之Asp.net MVC C#对象转JSON,DataTable转JSON,List<T>转JSON,JSON转List<T>,JSON转C#对象
    JSON.NET 使用技巧
    异常处理 Exception
    HTTP报文
    HttpWebRequest类
  • 原文地址:https://www.cnblogs.com/huicpc0212/p/4185980.html
Copyright © 2020-2023  润新知