首页 > 其他 > 详细

数据结构练习 - T004

时间:2021-09-02 08:11:19      阅读:19      评论:0      收藏:0      [点我收藏+]

放球

m 个球放入编号为 0,1,2,…,k-1 的 k 个盒中(\(m<2k\))要求第 \(i\) 个盒内必须放 \(2^i\) 只 球。如果无法满足这一条件,就一个不放,求出放球的具体方案。

输入 :m k

输出:若能放进去,则输出放入球的编号(空格隔开),否则输出-1


思路:本质就是一个将十进制转化为二进制的问题。

#include <bits/stdc++.h>
using namespace std;

int main()
{
    unsigned int m, r, i, k;
    scanf("%d %d", &m, &k);
    i = 0;
    /*方法1:
    m % 2 得到的余数为二进制的末位数
    m /= 2 再右移
    */

   if (m > (1<<(k-1))){
       printf("-1\n");
   }else{
        while (m){
            r = m & 1;
            // printf("m=%d, r=%d\n", m,r);
            if (r){
                printf("%d ", i);
            }
            i ++;
            m >>= 1;
        }
        printf("\n");
   }
    return 0;
}

数据结构练习 - T004

原文:https://www.cnblogs.com/wreng/p/15208022.html

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