#include<iostream> #include<vector> #include<algorithm> using namespace std; int countBits(int n) { int count = 0; while (n) { n = n & (n - 1); count++; } return count; } int main(){ int n; cin >> n; vector<int> rez; int count = 0; int m = 1; while(count <n){ count += countBits(m); rez.push_back(m); m++; } int t =0; for(int i=rez.size()-1;i>=0;i--){ if(countBits(rez[i]) == count-n){ rez[i] = -1; t =-1; break; } } cout << rez.size() + t << '\n'; for(int i=rez.size()-1;i>=0;i--)if(rez[i]!= -1)cout << rez[i] << ' '; cout << '\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 38 39 | #include<iostream> #include<vector> #include<algorithm> using namespace std; int countBits(int n) { int count = 0; while (n) { n = n & (n - 1); count++; } return count; } int main(){ int n; cin >> n; vector<int> rez; int count = 0; int m = 1; while(count <n){ count += countBits(m); rez.push_back(m); m++; } int t =0; for(int i=rez.size()-1;i>=0;i--){ if(countBits(rez[i]) == count-n){ rez[i] = -1; t =-1; break; } } cout << rez.size() + t << '\n'; for(int i=rez.size()-1;i>=0;i--)if(rez[i]!= -1)cout << rez[i] << ' '; cout << '\n'; } |