任务:
决定做一个蛮力:
#include <iostream>
using namespace std;
bool func(bool x, bool y, bool z, bool w)
{
return (!y + z + !x * w) == (w == z);
}
int main()
{
cout << "x" << " " << "y" << " " << "z" << " " << "w" << " " << "F" << endl;
for (size_t x = 0; x < 2; x++)
{
for (size_t y = 0; y < 2; y++)
{
for (size_t z = 0; z < 2; z++)
{
for (size_t w = 0; w < 2; w++)
{
if (func(x, y, z, w) == 1)
{
cout << x << " " << y << " " << z << " " << w << " " << "1" << endl;
}
}
}
}
}
}
程序输出:
x y z w F
0 0 0 0 1
1 0 0 0 1
1 1 0 1 1
1 1 1 1 1
我将稍微更改程序代码,使输出列与条件列相同。
#include <iostream>
using namespace std;
bool func(bool x, bool y, bool z, bool w)
{
return (!y + z + !x * w) == (w == z);
}
int main()
{
cout << "w" << " " << "y" << " " << "z" << " " << "x" << " " << "F" << endl; //<=== поменял местами x и w
for (size_t x = 0; x < 2; x++)
{
for (size_t y = 0; y < 2; y++)
{
for (size_t z = 0; z < 2; z++)
{
for (size_t w = 0; w < 2; w++)
{
if (func(x, y, z, w) == 1)
{
cout << w << " " << y << " " << z << " " << x << " " << "1" << endl; //<=== поменял местами x и w
}
}
}
}
}
}
程序输出:
w y z x F
0 0 0 0 1
0 0 0 1 1
1 1 0 1 1
1 1 1 1 1
来自条件的表格:
总的来说,我们看到程序输出的第二行等于条件表的第二行。但是条件表中有第一行和第三行,程序输出中只有一行(第三行)可以对应。问题是什么?我的程序没有生成所有可能的组合?


第一行非常不一致:) - 1 应该来自输入 0100 和 1100。
通过直接替换一个变量 1 和其余 0 的第一个集合给出了这个 x 必须是 1。所以,我们已经确定了第二个字母。
现在,代入 x==1,我们得到条件 (!y || z) == (w == z)。同样,交替选择 y、z、w 等于 1,其余为 0,我们发现这样的集合不存在(自己看)。
所以问题没有解决办法。
我画的程序是这样的——
她说没有解决方案,好吧,然后我只是寻找矛盾的条件......
也许我以某种错误的方式解释了任务 - 然后向我解释我错了什么,我会进一步思考......
更新
由 Mikhailo 纠正,是的,这个问题有一个独特的解决方案 -
xzyw,新代码 -