擴充套件問題:二進位制數n,從1開始,到n的所有二進位制數,然後數下其中出現的所有「1」的個數。例如:
f(1)=1
f(10)=2 (因為01,10共有2個1)
f(11)=100 (因為01,10,11共有4個1)
思路:以10110為例,考慮最高位為0時共有幾個1,因為後面4位中1和0出現的概率是相等的,也即1在每個位上出現的概率為(2^4)/2=8,最高位為0時,所有1的個數為4*8=32,即f(1111)=32.現在只需計算最高位為1的情況。最高位上出現1的個數的有10000,10001,10010,10011,10100,10101,10110;10110-1111=10110-10000+1=111.最高位為1或不為1時所有1的個數都算完了即f(1111)+10110-10000+1;而後我們只需考慮10110中其他位為1的時候,可以用與最高位同樣的處理方式,10110中除最高位外現只有第三位和第二位的值為1,f(10110)=f(1111)+10110-1111+f(110), f(110)=f(11)+110-11+f(10),f(10)=f(1)+10-1+f(0);
f(10110)=f(1111)+f(11)+f(1)+10110-1111+110-11+10-1+f(0),
f(n個1)=n*2^(n-1)
程式設計實現用上述轉換的方法即可
歸納得出數學公式如下:
程式設計之美2 4 1的數目
總體思路 先求個位上出現的1的個數,再找十位再找百位。先看個位找找規律 5 05 1 1 15 2 1,11 25 3 1,11,21 35 4 1,11,21,31 325 33 1,11,21,31,41,301,311,321 結論 個位上的1的數目s n 10 1 再看十位,找找規律 25 ...
程式設計之美 2 4 1的數目
package code.beauty.fungame public class countone private static int count1inaint int n return num private static void count1inallint int n system.out...
程式設計之美 2 4 1的數目
這道題其實是做過了的,在中 但是再次做還是相當的糟糕。又看了一遍答案。關鍵 要求每一位上1的個數,其任意一位上1的個數受當前位 高位 低位三方面的影響。注意這三位怎麼求,注意資料型別。注意迴圈條件。include long long sum1s unsigned long long n ifacto...