#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; } |
English