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

    输入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
  • 相关阅读:
    平均要取多少个(0,1)中的随机数才能让和超过1
    perl学习笔记
    K-means
    Mysql数据库常用操作整理
    ETL模型设计
    c++ 面试整理
    vim display line number
    inux 下的/etc/profile、/etc/bashrc、~/.bash_profile、~/.bashrc 文件的作用
    Linux命令大总结
    perl learning
  • 原文地址:https://www.cnblogs.com/huicpc0212/p/4185980.html
Copyright © 2011-2022 走看看