优秀的拆分题解
2025-11-05 22:22:49
发布于:北京
1阅读
0回复
0点赞
分析题意,n如果是奇数,那么必定不存在优秀的拆分。否则,n是偶数就一定存在优秀的拆分,因为n一定可以用二进表示,二进制的每一位1均表示2的某个次方。
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
if (n % 2) {
cout << -1;
}
else {
// n的范围为10的7次方,所以不会超过2的30次方,倒序枚举即可
for (int i = 30; i >= 0; i --)
// n >> i & 1 是判断n的二进制表示里,第i位是不是1,若是则输出
if (n >> i & 1) cout << ( 1 << i) << " ";
}
return 0;
}
这里空空如也

有帮助,赞一个