zoukankan      html  css  js  c++  java
  • 子集 题解

    校内题目——子集

    【问题描述】
    对于 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;
    } 
  • 相关阅读:
    java 反射
    java 泛型实现原理
    java 常量池
    java String的intern()方法
    HashMap和Hashtable的区别
    Java反射
    初始JSP
    JSP动态网页
    关于学习Vue的前置工作/技术储备
    Java 高级开发必修知识---反射
  • 原文地址:https://www.cnblogs.com/lbssxz/p/11009965.html
Copyright © 2011-2022 走看看