用c++写一到n的幂集
时间: 2024-10-15 16:08:48 浏览: 21
在C++中,我们可以使用位运算来生成1到n的所有幂集。这是因为每个元素i的幂集可以表示为它的二进制表示加上所有更低位的1。下面是一个简单的示例函数来实现这个功能:
```cpp
#include <iostream>
#include <vector>
std::vector<bool> generatePowerSet(int n) {
std::vector<bool> powerSet(n + 1, false);
for (int i = 0; i <= n; ++i) {
powerSet[i] = true;
for (int j = i - 1; j >= 0; --j) {
if (powerSet[j]) {
powerSet[j + 1] = !powerSet[j + 1]; // XOR操作将当前位设置为相反值
}
}
}
return powerSet;
}
void printPowerSet(const std::vector<bool>& powerSet) {
for (bool bit : powerSet) {
if (bit) {
std::cout << "1";
} else {
std::cout << "0";
}
std::cout << (bit ? " " : "");
}
std::cout << "\n";
}
int main() {
int n = 4;
std::vector<bool> set = generatePowerSet(n);
std::cout << "Power Set of " << n << ": \n";
printPowerSet(set);
return 0;
}
```
在这个代码中,`generatePowerSet` 函数首先创建一个布尔向量,然后对每个位置执行位运算,将其与其左侧的位进行异或(XOR),得到的是该位置的二进制表示加上前面所有位置的1。`printPowerSet` 函数用于打印出结果。
阅读全文