1. 程式人生 > >鬼谷子的錢袋 2006HNOI

鬼谷子的錢袋 2006HNOI

好的 span nbsp font 咨詢 n) col pre 多少

題目描述 Description

鬼谷子非常聰明,正因為這樣,他非常繁忙,經常有各諸侯車的特派員前來向他咨詢時政。有一天,他在鹹陽遊歷的時候,朋友告訴他在鹹陽最大的拍賣行(聚寶商行)將要舉行一場拍賣會,其中有一件寶物引起了他極大的興趣,那就是無字天書。但是,他的行程安排得很滿,他他已經買好了去邯鄲的長途馬車標,不巧的是出發時間是在拍賣會快要結束的時候。於是,他決定事先做好準備,將自己的金幣數好並用一個個的小錢袋裝好,以便在他現有金幣的支付能力下,任何數目的金幣他都能用這些封閉好的小錢的組合來付賬。鬼谷子也是一個非常節儉的人,他想方設法使自己在滿足上述要求的前提下,所用的錢袋數最少,並且不有兩個錢袋裝有相同的大於1的金幣數。假設他有m個金幣,你能猜到他會用多少個錢袋,並且每個錢袋裝多少個金幣嗎?

輸入描述 Input Description

輸入中只包含一個整數,表示鬼谷子現有的總的金幣數目m。

輸出描述 Output Description

輸出中包含兩行,第一行只有一個整數h,表示所用錢袋個數,第二行表示每個錢袋所裝的金幣數目,且按從小到大的順序排列,中間用空格隔開。

樣例輸入 Sample Input

3

樣例輸出 Sample Output

2

1 2

數據範圍及提示 Data Size & Hint

1≤m≤1000000000。

就是log(n)+1;

 1 #include<cstdio>
 2
3 int a[100000003]; 4 int main() 5 { 6 int n; 7 int cnt=0; 8 scanf("%d",&n); 9 while(n!=0) 10 { 11 cnt++; 12 a[cnt]=n/2; 13 int k=n%2; 14 a[cnt]+=k; 15 n/=2; 16 } 17 18 printf("%d\n",cnt); 19 20 for(int
i=cnt;i>=1;i--) 21 { 22 printf("%d ",a[i]); 23 } 24 return 0; 25 }

鬼谷子的錢袋 2006HNOI