#include <iostream> #include <list> using namespace std; int dwojkowy(int liczba) { int wyn = 0; while (liczba >= 2){ int reszta = liczba % 2; liczba = (liczba - reszta) / 2; wyn += reszta; } wyn += liczba % 2; return wyn; } int main() { list <int> ciag; int n; cin >> n; int wyn = 0; int suma = 0; int licz = 1; while (suma < n){ suma += dwojkowy(licz); licz += 1; } licz --; if (suma==n){ cout << licz << endl; for (int i=licz; i>=1; i--) cout << i << " "; } else { int x = suma - n; int a = licz-1; ciag.push_back(licz); int wyn = 1; while (x>0){ if (dwojkowy(a) <= x) x -= dwojkowy(a); else { ciag.push_back(a); wyn += 1; } a -= 1; } while (a >= 1){ ciag.push_back(a); a -= 1; wyn += 1; } cout << wyn << endl; for(list<int>::iterator i=ciag.begin(); i!= ciag.end(); ++i) cout<<*i<<" "; } return 0; }
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> #include <list> using namespace std; int dwojkowy(int liczba) { int wyn = 0; while (liczba >= 2){ int reszta = liczba % 2; liczba = (liczba - reszta) / 2; wyn += reszta; } wyn += liczba % 2; return wyn; } int main() { list <int> ciag; int n; cin >> n; int wyn = 0; int suma = 0; int licz = 1; while (suma < n){ suma += dwojkowy(licz); licz += 1; } licz --; if (suma==n){ cout << licz << endl; for (int i=licz; i>=1; i--) cout << i << " "; } else { int x = suma - n; int a = licz-1; ciag.push_back(licz); int wyn = 1; while (x>0){ if (dwojkowy(a) <= x) x -= dwojkowy(a); else { ciag.push_back(a); wyn += 1; } a -= 1; } while (a >= 1){ ciag.push_back(a); a -= 1; wyn += 1; } cout << wyn << endl; for(list<int>::iterator i=ciag.begin(); i!= ciag.end(); ++i) cout<<*i<<" "; } return 0; } |