#include <iostream>
#include <vector>
using namespace std;
unsigned int countSetBits(unsigned int number);
void showResult(std::vector<int>& resultVector);
int main()
{
int expectedPower = 0;
cin >> expectedPower;
std::vector<int> resultVector;
int currentNumber = 1;
while (expectedPower >= 0)
{
auto powerOfCurrentNumber = countSetBits(currentNumber);
expectedPower -= powerOfCurrentNumber;
resultVector.push_back(currentNumber);
currentNumber++;
}
if (expectedPower < 0)
{
currentNumber = resultVector.back();
while (expectedPower != 0)
{
if (expectedPower + countSetBits(currentNumber) == 0)
{
resultVector.erase(resultVector.begin() + currentNumber - 1);
break;
}
currentNumber--;
}
}
showResult(resultVector);
return 0;
}
unsigned int countSetBits(unsigned int n)
{
unsigned int count = 0;
while (n) {
count += n & 1;
n >>= 1;
}
return count;
}
void showResult(std::vector<int>& resultVector)
{
cout << resultVector.size() << endl;
//for (const auto number : resultVector)
for (int i = resultVector.size() - 1; i >= 0; --i)
{
cout << resultVector[i] << " ";
}
}
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 | #include <iostream> #include <vector> using namespace std; unsigned int countSetBits(unsigned int number); void showResult(std::vector<int>& resultVector); int main() { int expectedPower = 0; cin >> expectedPower; std::vector<int> resultVector; int currentNumber = 1; while (expectedPower >= 0) { auto powerOfCurrentNumber = countSetBits(currentNumber); expectedPower -= powerOfCurrentNumber; resultVector.push_back(currentNumber); currentNumber++; } if (expectedPower < 0) { currentNumber = resultVector.back(); while (expectedPower != 0) { if (expectedPower + countSetBits(currentNumber) == 0) { resultVector.erase(resultVector.begin() + currentNumber - 1); break; } currentNumber--; } } showResult(resultVector); return 0; } unsigned int countSetBits(unsigned int n) { unsigned int count = 0; while (n) { count += n & 1; n >>= 1; } return count; } void showResult(std::vector<int>& resultVector) { cout << resultVector.size() << endl; //for (const auto number : resultVector) for (int i = resultVector.size() - 1; i >= 0; --i) { cout << resultVector[i] << " "; } } |
English