1的数目_扩展问题
2013-04-02 16:22
190 查看
扩展问题:给定二进制数N,写下从1开始到N的所有二进制数,数一下其中出现的所有“1”的个数:
f(1)=1
f(10)=10 (因为01,10,有两个1)
f(11)=100 (因01,10,11,有四个1)
解答:考虑f(1011):1,10,11,100,101,110,111,1000,1001,1010,1011
第一位上:高位数为101,每两个数就出现一个1,则出现101个1;且current位为1,低位数为0,所以5+1=6
第二位上:高位数为10,每四个数出现一个1,则出现(10)*2=4个1;且current位为1,低位数为1,所以4+1+1=6
第三位:高位数为1,出现(1)*2^2=4个1;且current位为0,低位数为11;所以4+0=4
第四位:高位数为0,,current位为1,低位数为011;所以为 低位数+1=4
通过观察发现在 current==1 时,第n位上出现1的次数 = 高位数*2^n-1 +低位数+1
current==0 时,第n位上出现1的次数 = 高位数*2^n-1
附:
f(1)=1
f(10)=10 (因为01,10,有两个1)
f(11)=100 (因01,10,11,有四个1)
解答:考虑f(1011):1,10,11,100,101,110,111,1000,1001,1010,1011
第一位上:高位数为101,每两个数就出现一个1,则出现101个1;且current位为1,低位数为0,所以5+1=6
第二位上:高位数为10,每四个数出现一个1,则出现(10)*2=4个1;且current位为1,低位数为1,所以4+1+1=6
第三位:高位数为1,出现(1)*2^2=4个1;且current位为0,低位数为11;所以4+0=4
第四位:高位数为0,,current位为1,低位数为011;所以为 低位数+1=4
通过观察发现在 current==1 时,第n位上出现1的次数 = 高位数*2^n-1 +低位数+1
current==0 时,第n位上出现1的次数 = 高位数*2^n-1
附:
十进制 | 二进制 | 最右边1的个数总和 | 倒数第二1的个数总和 | 倒数第三1的个数总和 | 倒数第四1的个数总和 | 倒数第五1的个数总和 | 十进制 | 二进制 | 最右边1的个数总和 | 倒数第二1的个数总和 | 倒数第三1的个数总和 | 倒数第四1的个数总和 | 倒数第五1的个数总和 |
0 | 00000 | 0 | 0 | 0 | 0 | 0 | 13 | 01101 | 7 | 6 | 6 | 6 | 0 |
1 | 00001 | 1 | 0 | 0 | 0 | 0 | 14 | 01110 | 7 | 7 | 7 | 7 | 0 |
2 | 00010 | 1 | 1 | 0 | 0 | 0 | 15 | 01111 | 8 | 8 | 8 | 8 | 0 |
3 | 00011 | 2 | 2 | 0 | 0 | 0 | 16 | 10000 | 8 | 8 | 8 | 8 | 1 |
4 | 00100 | 2 | 2 | 1 | 0 | 0 | 17 | 10001 | 9 | 8 | 8 | 8 | 2 |
5 | 00101 | 3 | 2 | 2 | 0 | 0 | 18 | 10010 | 9 | 9 | 8 | 8 | 3 |
6 | 00110 | 3 | 3 | 3 | 0 | 0 | 19 | 10011 | 10 | 10 | 8 | 8 | 4 |
7 | 00111 | 4 | 4 | 4 | 0 | 0 | 20 | 10100 | 10 | 10 | 9 | 8 | 5 |
8 | 01000 | 4 | 4 | 4 | 1 | 0 | 21 | 10101 | 11 | 10 | 10 | 8 | 6 |
9 | 01001 | 5 | 4 | 4 | 2 | 0 | 22 | 10110 | 11 | 11 | 11 | 8 | 7 |
10 | 01010 | 5 | 5 | 4 | 3 | 0 | 23 | 10111 | 12 | 12 | 12 | 8 | 8 |
11 | 01011 | 6 | 6 | 4 | 4 | 0 | 24 | 11000 | 12 | 12 | 12 | 9 | 9 |
12 | 01100 | 6 | 6 | 5 | 5 | 0 | 25 | 11001 | 13 | 12 | 12 | 10 | 10 |
相关文章推荐
- 编程之美--2.4 1的数目之扩展问题
- 编程之美 2.4 “1”的数目及扩展问题
- 编程之美--高效率算出1的数目之扩展问题
- 安装php的tokyo_tyrant扩展时遇到的问题,以及解决方法
- jquery ajax 由于扩展配置问题而无法提供您请求的页面。如果该页面是脚本,请添加处理程序。如果应下载文件,请添加 MIME 映射。
- 小球称重问题扩展
- 如何解决高版本Google Chrome(谷歌浏览器)扩展程序强制停用问题?或者经常提示停用扩展程序
- 存储器容量扩展的问题
- gpexpand扩展集群节点过程及问题解决
- php: time limit exceeded `Success' @ cache.c/GetImagePixelCache/2051---Imagemagick的php扩展问题
- 【扩展Baby Step Giant Step解决离散对数问题】
- 解决高版本Stable Beta扩展程序强制停用问题
- 高版本Chrome扩展程序强制停止问题
- 解决ORA-01652(无法扩展表空间)问题
- 没有文件扩展”js”的脚本引擎的问题的解决办法
- php启用zend guard loader扩展问题
- 《编程之美》蚂蚁爬杆问题的扩展
- PHP扩展迁移为PHP7扩展兼容性问题记录
- 解决自定义Shiro.Realm扩展类不能用注解(@Resource或@Autowire)自动装配的问题
- 老鼠毒药问题和它的扩展