早教吧 育儿知识 作业答案 考试题库 百科 知识分享

我们称正整数为好数,如果的二进制表示中1的个数多于0的个数,如6=(110)2为好数,1984=(1111100...我们称正整数为好数,如果的二进制表示中1的个数多于0的个数,如6=(110)2为好数,1984=(

题目详情
我们称正整数为好数,如果的二进制表示中1的个数多于0的个数,如6=(110)2为好数,1984=(111 11 00...
我们称正整数为好数,如果的二进制表示中1的个数多于0的个数,如6=(110)2为好数,1984=(111 11 000 000)2不为好数,求不超过2012的好数共有_个答案是1164要解析
▼优质解答
答案和解析
先求2至2047 = (111 1111 1111)之间的好数.
考虑变换: 保持首位的1不变, 将其后的0变为1, 1变为0.
易见2至2047的数在这样的变换下两两配对.
配对的情况有三种: 两个数都是好数, 两个数都不是好数, 两个数中恰有1个好数.
第一种情况要求二进制位数为奇数, 且除首位为1外, 后面的各位0, 1各半.
这样的数有C(2,1)+C(4,2)+C(6,3)+C(8,4)+C(10,5) = 2+6+20+70+252 = 350个.
第二种情况其实是不可能的.
因为若一个数不是好数, 其0的个数不少于1的个数, 变换后1的个数一定多于0的个数(首位的1不变).
从2至2047共2046个数中除去第一种情况的350个数, 剩余1696个数.
这些都属于第三种情况, 其中恰有一半好数, 即848个.
于是2至2047共有好数350+848 = 1198个.
考虑2013至2047, 它们的二进制表示都是11位.
(111 1110 0000) = 2048-32 = 2016, 因此2016至2047都是好数(前6位都是1).
可验证2013, 2014, 2015也都是好数.
于是2至2012共有好数1198-35 = 1163个.
再加上1是好数, 不超过2012的好数共1164个.