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