- lizexuan's blog
【20CSPJ普及组】优秀的拆分
- 2023-7-1 15:32:08 @
题目:
题目解析
看注释
代码
#include<bits/stdc++.h>
using namespace std;
int main() {
int a[26]; // 10的7次方不到2的26次方
int n;
cin >> n; // 输入n
if (n % 2 != 0) { // 只有偶数才能拆分,若为奇数输出-1
cout << "-1";
} else {
a[0] = 1;
for (int i = 1; i < 26; i++) { // 依次打表
a[i] = a[i - 1] * 2; // 此项为前一项*2
}
for (int i = 25; i >= 1; i--) { // 列举
if (n >= a[i]) { // 如果n比a[i]大或等于
cout << a[i] << " "; // 就拆分
n -= a[i]; // 要减
}
}
}
return 0;
}