HDU 2502 月之數(簡單遞推)

2022-04-04 23:11:24 字數 1080 閱讀 2781

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 input31

23sample output13

8分析:

1二進位制數有1個:  1

2二進位制數有2個:10 11

3二進位制數有4個:100 101 110 111

4二進位制數有8個:1000 1001 1010 1011 1100 1101 1110 1111

可以看到第n二進位制數是第(n-1)二進位制數 總數目的2倍,他們第一位都是1,所以多出來2n個1。

所有的數字中,一半是在1後邊加了第(n-1)二進位制數。另一半第一位是1,第二位是0,最後的各個位跟第(n-1)二進位制數中最後個各個位都相同,令f[n]表示第n二進位制數中1的個數。所以多出來 f[n-1] + (f[n-1] - 2n-1) = 2*f[n-1]-2n-1

所以可以推導出:f[n] = 2n + 2*f[n-1] -2n-1 = 2n-1 + 2*f[n-1]

**如下:

1 # include2

int f[21]=;

3void

init()9}

10int

main()

19return0;

20 }

杭電2502 遞推) 之 月之數

description 當寒月還在讀大一的時候,他在一本武林秘籍中 據後來考證,估計是計算機基礎,狂汗 ing 發現了神奇的二進位制數。如果乙個正整數m表示成二進位制,它的位數為n 不包含前導0 寒月稱它為乙個n二進位制數。所有的n二進位制數中,1的總個數被稱為n對應的月之數。例如,3二進位制數總共...

關於錢幣之月

最近經常有人在qq裡發下面這個資訊 2010年的10月份是個不尋常的月份,這個月份中有5個星期五,5個星期六,5個星期日,這種情況需要823年後才能再次出現,這種月份被認為是錢幣之月,如果把這個訊息傳送給包括我在內的8位好朋友,4天以後就會有錢幣上的收穫,這是風水學上的理論,如果不去傳送將會丟失成功...

HDU之演算法初步

sort函式在c 的algorithm庫 sort addr1,addr2,cmp 表示從大到小排序,表示從小到大排序 struct s bool cmp s s1,s s2 s ss n sort ss,ss n,cmp include include includeusing namespace...