#include<bits/stdc++.h> using namespace std; int n; vector<int>liczba; int wyznacz(int l){ int ans = 0; while(l){ if(l % 2) ans++; l /= 2; } return ans; } int main(){ scanf("%d", &n); int idx = 1; while(n){ int waga = wyznacz(idx); while(n - waga < 0){ n += wyznacz(liczba.back()); liczba.pop_back(); } n -= waga; liczba.push_back(idx++); } printf("%d\n", liczba.size()); for(int i = liczba.size() - 1; i >= 0; i--) printf("%d ", liczba[i]); printf("\n"); }
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 | #include<bits/stdc++.h> using namespace std; int n; vector<int>liczba; int wyznacz(int l){ int ans = 0; while(l){ if(l % 2) ans++; l /= 2; } return ans; } int main(){ scanf("%d", &n); int idx = 1; while(n){ int waga = wyznacz(idx); while(n - waga < 0){ n += wyznacz(liczba.back()); liczba.pop_back(); } n -= waga; liczba.push_back(idx++); } printf("%d\n", liczba.size()); for(int i = liczba.size() - 1; i >= 0; i--) printf("%d ", liczba[i]); printf("\n"); } |