如果你使用逻辑可视化工具,比如卡诺地图,你会发现这是一个问题,如果你想用 If (...)行写一个完整的逻辑术语,你就无法避免它。Lopina 已经展示过了,不可能再写得更简单了。您可以略微修改一下,但是对于您和机器来说,它仍然很难阅读。
计算解决方案并不坏,它们表明你真正想要的是什么。如何有效地进行计数取决于您的编程语言。使用 Python 或 LinQ 的数组解决方案看起来不错,但是要注意,这是缓慢的。Wolf 的(a + b + x + y) = = 3将很好很快地工作,但是只有在你的语言将“ true”等同于1的情况下。如果“ true”由 -1表示,则必须测试 -3:)
如果您的语言使用真布尔值,您可以尝试显式地对它进行编程(我使用! = 作为 XOR 测试) :
if (a)
{
if (b)
return (x != y); // a,b=true, so either x or y must be true
else
return (x && y); // a=true, b=false, so x AND y must be true
}
else
{
if (b)
return (x && y); // a=false, b=true, so x and y must be true
else
return false; // a,b false, can't get 3 of 4
}
static bool boolTester(int n, params bool[] values)
{
int sum = 0;
for (int i = 0; i < values.Length; i++)
{
if (values[i] == true)
{
sum += 1;
}
}
if( sum == n)
{
return true;
}
return false;
}
你这样称呼它:
bool a = true;
bool b = true;
bool c = true;
bool d = false;
bool test = false;
test = boolTester(3, a, b, c, d);