假设有n个布尔变量,输出所有可能的真值组合,例如,如果n = 2,有四种可能:<true,true>,<true,false>,<false,true>,<false,false>.编写C语言的函数加以实现。这里数组大小只开了10,使用std::boolalpha直接输出bool类型的true 和 false。</span>
递归版:
#include <iostream>
#include <memory>
bool a[10];
void perm(bool* array, int index, int n)
{
if (index == n)
{
std::cout << "<";
std::cout << std::boolalpha << array[0];
if (n > 1)
{
for (int i = 1; i < n; ++i)
std::cout << "," << std::boolalpha << array[i];
}
std::cout << ">\n";
return;
}
else
{
int j = index;
perm(array, j+1, n);
array[j] = !array[j];
perm(array, j+1, n);
}
}
int main()
{
int n;
while (std::cin >> n)
{
memset(a, true, sizeof(a));
while (n <= 0 || n > 9)
{
std::cout << "num should between 0 and 9!!\ninput again:";
std::cin >> n;
}
perm(a, 0, n);
}
return 0;
}