• 子集生成


    位向量法:

     1 #include<bits/stdc++.h>
     2 #define LL long long
     3 #define maxn 1005
     4 using namespace std;
     5 int n;
     6 int B[maxn];
     7 void print_subset(int n,int B[],int cur)
     8 {
     9     if(cur==n+1)
    10     {
    11         for(int i=0;i<cur;i++)
    12         if(B[i])printf("%d ",i);
    13         printf("
    ");
    14         return;
    15     }
    16     B[cur]=1;//选第cur个元素
    17     print_subset(n,B,cur+1);
    18     B[cur]=0;//不选第cur个元素
    19     print_subset(n,B,cur+1);
    20 }
    21 int main()
    22 {
    23     scanf("%d",&n);
    24     print_subset(n,B,1);
    25     return 0;
    26 }

    二进制法:

     1 #include<bits/stdc++.h>
     2 #define LL long long
     3 #define maxn 1005
     4 using namespace std;
     5 int n;
     6 void print_subset(int n,int s)
     7 {
     8     for(int i=0;i<n;i++)//这里注意,i从0开始取,2^0=1,最大取到n-1,代表最大可以在n-1上取1。
     9         if(s&(1<<i))printf("%d ",i);//按位取,如果是1则输出
    10     printf("
    ");
    11 }
    12 int main()
    13 {
    14     scanf("%d",&n);
    15     for(int i=1;i<=(1<<n);i++)//生成1~2^n种不同的可能
    16     {
    17         print_subset(n,i);
    18     }
    19     return 0;
    20 }
  • 相关阅读:
    SDN第一次上机作业
    期末作业验收
    SDN第5次上机作业
    个人作业——软件工程实践总结作业
    SDN第4次上机作业
    SDN第四次作业
    SDN第三次上机作业
    SDN第三次作业
    SDN第二次上机作业
    SDN第二次作业
  • 原文地址:https://www.cnblogs.com/zuiaimiusi/p/10888783.html
Copyright © 2020-2023  润新知