• 子集 题解


    校内题目——子集

    【问题描述】
    对于 n=4 时,对应的集合 s={4,3,2,1},他的非空子集有 15 个依次如下:
    当 n=4 时,集合{4,3,2,1}的 15 个子集分别对应于 4 位二进制数:
    {1}:0001;{2}:0010;{1,2}:0011;{3}:0100,…,{1,2,3,4}:1111。
    把二进制数相对应的十进制数的 1,2,3,…,15 分别作为相应集合的编号。
    如子集{1,2,4}对应的二进制数是 1011,相应的十进制数是 11,所以子集{1,2,4}的编号
    为 11。
    任务:
    对于给定的 n 和 m,输出集合{1,2,…,n}的编号为 m 的子集。
    【输入格式】
    n,m
    【输出格式】
    集合的第 m 个子集的元素,元素从小到大输出,中间一个空格隔开。
    【样例输入】
    4 11
    【样例输出】
    1 2 4
    【数据范围及约定】
    100%的数据:n<=20,m<=2^n-1。
     
    那么,这就是一道水(是真水)题
    思路转化二进制后看对应位置有没有1就OK了
    代码:
    #include<bits/stdc++.h>
    using namespace std;
    int n,m,judge[22],k=1;//n就是站位的
    int main(){
        scanf("%d%d",&n,&m);
        while(m>0)
            judge[k]=m%2,m/=2,k++;
        for(int i=1;i<=k-1;i++)
            if(judge[i]!=0)printf("%d ",i);
        return 0;
    } 
  • 相关阅读:
    求欧拉回路 UOJ117
    POJ2749 Building road
    POJ3678 Katu Puzzle
    快速修改和上传网站图片技巧
    phpstudy易犯的错误
    关于网站端口的认识
    金融互助后台验证码显示不出来。
    全局搜索数据库
    MySQL命令行导出数据库
    MySQL导入大sql 文件大小限制问题的解决
  • 原文地址:https://www.cnblogs.com/lbssxz/p/11009965.html
Copyright © 2020-2023  润新知