首页 > 其他 > 详细

子集 题解

时间:2019-06-12 15:47:25      阅读:103      评论:0      收藏:0      [点我收藏+]

校内题目——子集

【问题描述】
对于 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;
} 

 

子集 题解

原文:https://www.cnblogs.com/lbssxz/p/11009965.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!