shunfurh
编程介的小学生
2017-02-04 07:52
采纳率: 92.7%
浏览 1.4k
已采纳

月之数

Problem Description
当寒月还在读大一的时候,他在一本武林秘籍中(据后来考证,估计是计算机基础,狂汗-ing),发现了神奇的二进制数。
如果一个正整数m表示成二进制,它的位数为n(不包含前导0),寒月称它为一个n二进制数。所有的n二进制数中,1的总个数被称为n对应的月之数。
例如,3二进制数总共有4个,分别是4(100)、5(101)、6(110)、7(111),他们中1的个数一共是1+2+2+3=8,所以3对应的月之数就是8。

Input
给你一个整数T,表示输入数据的组数,接下来有T行,每行包含一个正整数 n(1<=n<=20)。

Output
对于每个n ,在一行内输出n对应的月之数。

Sample Input

3
1
2
3

Sample Output

1
3
8

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • Foreveryezi
    Foreveryezi 2017-02-04 08:15
    已采纳

    其实这就是一找规律的题目。
    需要满足的条件有:
    1、首位必须是1,这个条件很好找,n二进制数有多少个,就首先要在月之数里面加上2^(n-1)(每个二进制数首位都为1)
    2、首位解决了,就是后面的位。后面的位0和1出现的概率一样。后面一共会出现2^(n-2)*(n-1)
    所以总共是:月之数 = 2^(n-1)+2^(n-2)*(n-1) = 2^(n-2)*(n+1)

    点赞 评论
  • weixin_37289816
    ALL--IN 2017-02-04 10:17

    第一步:得到它的二进制位数n;

    第二步:统计n位二进制数的个数m;公式(2^n-1)-2^(n-1)+1

    第三步:结果为m + m*(n-1)/2。

    举例:

    3位二进制数共有(2^3-1)-2^2+1=4个,月之数为4 + 4*(3-1)/2 = 8。

    4位二进制数共有(2^4-1)-2^3+1=8个,月之数为8 + 8*(4-1)/2 = 20。

    点赞 评论
  • lanrenxiaowen
    十阶魔方 2017-02-05 01:59

    1、先在控制台输入想要查看月之数的数
    2、得到这个数将它进行二进制转换
    3、再将转换后的数字分别再进行二进制转换
    4、将得到的数字拼接成字符串
    5、然后对这个字符串进行查询,逢1记录一个
    6、最后得到记录总共有多少个1就行了

    点赞 评论

相关推荐