鬼谷子很是聰明,正由於這樣,他很是繁忙,常常有各諸侯車的特派員前來向他諮詢時政。c++
有一天,他在咸陽遊歷的時候,朋友告訴他在咸陽最大的拍賣行(聚寶商行)將要舉行一場拍賣會,其中有一件寶物引發了他極大的興趣,那就是無字天書。ide
可是,他的行程安排得很滿,他已經買好了去邯鄲的長途馬車票,不巧的是出發時間是在拍賣會快要結束的時候。因而,他決定事先作好準備,將本身的金幣數好並用一個個的小錢袋裝好,以便在他現有金幣的支付能力下,任何數目的金幣他都能用這些封閉好的小錢的組合來付帳。spa
鬼谷子也是一個很是節儉的人,他千方百計使本身在知足上述要求的前提下,所用的錢袋數最少,而且不有兩個錢袋裝有相同的大於1的金幣數。假設他有m個金幣,你能猜到他會用多少個錢袋,而且每一個錢袋裝多少個金幣嗎?ci
輸入格式:input
包含一個整數,表示鬼谷子現有的總的金幣數目m。其中,1≤m ≤1000000000。it
輸出格式:class
兩行,第一行一個整數h,表示所用錢袋個數im
第二行表示每一個錢袋所裝的金幣個數,由小到大輸出,空格隔開支付
3
2 1 2
比較巧妙 沒想到T_T
#include<bits/stdc++.h> using namespace std; //input by bxd #define rep(i,a,b) for(int i=(a);i<=(b);i++) #define repp(i,a,b) for(int i=(a);i>=(b);--i) #define RI(n) scanf("%d",&(n)) #define RII(n,m) scanf("%d%d",&n,&m) #define RIII(n,m,k) scanf("%d%d%d",&n,&m,&k) #define RS(s) scanf("%s",s); #define ll long long #define pb push_back #define REP(i,N) for(int i=0;i<(N);i++) #define CLR(A,v) memset(A,v,sizeof A) ////////////////////////////////// #define inf 0x3f3f3f3 const int N=500+5; const int M=10*N; ll a[N]; int main() { ll n; cin>>n; int cnt=0; while(n) { a[++cnt]=(n+1)/2; n/=2; } cout<<cnt<<endl; repp(i,cnt,1) printf("%d ",a[i]); return 0; }