#include <iostream> using namespace std; bool czy_jest_nuta[200000]; int roznicz_miedzy_nutami[200000]; int l_bitow(int liczba); int main(){ long n=0; cin >>n; int liczba=0; int ile = 1; bool czy=true; int l_bitow_pom=0; int last=0; for(int i =0; i<200000;i++){ roznicz_miedzy_nutami[i]= l_bitow_pom = l_bitow(i); czy_jest_nuta[i]= true; n-=l_bitow_pom; last =i; if (n<=0) break; } // cout <<last; bool czyok=false; for(int i =last-1; i>=0;i--) { if(n + roznicz_miedzy_nutami[i]==0) { czy_jest_nuta[i]=false; // cout <<i; czyok = true; break; } } if (!czyok) { cout<<"error"<<endl; return 0; } //cout <<last; // for (int i=last;i>0;i--) { // cout << i <<" "<<czy_jest_nuta[i] <<endl;; // } if(n==0) cout <<last<<endl; else cout <<last-1<<endl; for (int i=last;i>0;i--) { if (czy_jest_nuta[i]) cout << i <<" "; } cout <<endl; return 0; } int l_bitow(int liczba){ int out=0; int liczba_pom=liczba; while(!liczba_pom==0) { out +=(1&liczba_pom); liczba_pom=(liczba_pom >> 1); } // cout <<liczba << " " <<out <<endl; return out; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | #include <iostream> using namespace std; bool czy_jest_nuta[200000]; int roznicz_miedzy_nutami[200000]; int l_bitow(int liczba); int main(){ long n=0; cin >>n; int liczba=0; int ile = 1; bool czy=true; int l_bitow_pom=0; int last=0; for(int i =0; i<200000;i++){ roznicz_miedzy_nutami[i]= l_bitow_pom = l_bitow(i); czy_jest_nuta[i]= true; n-=l_bitow_pom; last =i; if (n<=0) break; } // cout <<last; bool czyok=false; for(int i =last-1; i>=0;i--) { if(n + roznicz_miedzy_nutami[i]==0) { czy_jest_nuta[i]=false; // cout <<i; czyok = true; break; } } if (!czyok) { cout<<"error"<<endl; return 0; } //cout <<last; // for (int i=last;i>0;i--) { // cout << i <<" "<<czy_jest_nuta[i] <<endl;; // } if(n==0) cout <<last<<endl; else cout <<last-1<<endl; for (int i=last;i>0;i--) { if (czy_jest_nuta[i]) cout << i <<" "; } cout <<endl; return 0; } int l_bitow(int liczba){ int out=0; int liczba_pom=liczba; while(!liczba_pom==0) { out +=(1&liczba_pom); liczba_pom=(liczba_pom >> 1); } // cout <<liczba << " " <<out <<endl; return out; } |