#include <cstdio>
#include <algorithm>
int main() {
int n;
scanf("%d\n", &n);
int values[n], size = 0, removed = 0;
int cnt = 0;
while (n > 0) {
n -= __builtin_popcount(++cnt);
values[cnt - 1] = cnt;
}
int nCnt = cnt;
while (n < 0) {
if (n + __builtin_popcount(nCnt) <= 0) {
n += __builtin_popcount(nCnt);
values[nCnt - 1] = -1;
removed += 1;
}
nCnt -= 1;
}
printf("%d\n", cnt - removed);
for (int i=cnt - 1; i>=0; i--) {
if (values[i] != -1) printf("%d ", values[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 | #include <cstdio> #include <algorithm> int main() { int n; scanf("%d\n", &n); int values[n], size = 0, removed = 0; int cnt = 0; while (n > 0) { n -= __builtin_popcount(++cnt); values[cnt - 1] = cnt; } int nCnt = cnt; while (n < 0) { if (n + __builtin_popcount(nCnt) <= 0) { n += __builtin_popcount(nCnt); values[nCnt - 1] = -1; removed += 1; } nCnt -= 1; } printf("%d\n", cnt - removed); for (int i=cnt - 1; i>=0; i--) { if (values[i] != -1) printf("%d ", values[i]); } } |
English