#include <iostream>
#include <string>
using namespace std;
int countOnes(int number) {
int result = 1;
while(number > 1) {
if(number % 2 == 1) {
result ++;
}
number = number >> 1;
//cout << "number :" << number << "\n";
}
return result;
}
int main() {
std::ios_base::sync_with_stdio(false);
std::cin.tie(NULL);
//cout << countOnes(1);
int* onesNumber = new int[1000000];
int* onesSum = new int[1000000];
int* result = new int[1000000];
int sum;
cin >> sum;
int number = 1;
onesNumber[1] = 1;
onesSum[1] = 1;
while(sum > onesSum[number]) {
number++;
onesNumber[number] = countOnes(number);
onesSum[number] = onesSum[number - 1] + onesNumber[number];
//cout << "number: " << number << ", oneSum: " << onesSum[number] << " onesNumber: " << onesNumber[number] << "\n";
}
int count = 0;
while(sum > 0) {
if(number == 1 ) {
result[count] = number;
sum -= onesNumber[number];
count++;
} else if(onesSum[number - 1] < sum) {
result[count] = number;
sum -= onesNumber[number];
count++;
}
number--;
}
cout << count << "\n";
for(int i = 0; i < count; i++) {
cout << result[i];
if(i == count - 1) {
cout << "\n";
} else {
cout << " ";
}
}
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 71 72 | #include <iostream> #include <string> using namespace std; int countOnes(int number) { int result = 1; while(number > 1) { if(number % 2 == 1) { result ++; } number = number >> 1; //cout << "number :" << number << "\n"; } return result; } int main() { std::ios_base::sync_with_stdio(false); std::cin.tie(NULL); //cout << countOnes(1); int* onesNumber = new int[1000000]; int* onesSum = new int[1000000]; int* result = new int[1000000]; int sum; cin >> sum; int number = 1; onesNumber[1] = 1; onesSum[1] = 1; while(sum > onesSum[number]) { number++; onesNumber[number] = countOnes(number); onesSum[number] = onesSum[number - 1] + onesNumber[number]; //cout << "number: " << number << ", oneSum: " << onesSum[number] << " onesNumber: " << onesNumber[number] << "\n"; } int count = 0; while(sum > 0) { if(number == 1 ) { result[count] = number; sum -= onesNumber[number]; count++; } else if(onesSum[number - 1] < sum) { result[count] = number; sum -= onesNumber[number]; count++; } number--; } cout << count << "\n"; for(int i = 0; i < count; i++) { cout << result[i]; if(i == count - 1) { cout << "\n"; } else { cout << " "; } } return 0; } |
English