检查至少有十分之二的布尔是真的

时间:2012-11-07 14:52:49

标签: language-agnostic logic boolean-logic boolean-operations

如果三个布尔值中至少有两个是真的,这是最容易找到的方法:

BOOL a, b, c;
-(BOOL)checkAtLeastTwo
{
  return a && (b || c) || (b && c); 
}

如果有10个布尔值,并且至少有两个布尔值必须是真的,那么最佳解决方案是什么?提前谢谢。

2 个答案:

答案 0 :(得分:5)

您的原始实现不是最佳的 - 您只需求和值:

return (int)a + (int)b + (int)c >= 2;

显然你可以将它扩展到10个变量:

return (int)a + (int)b + (int)c + (int)d + (int)e +
       (int)f + (int)g + (int)h + (int)i + (int)j >= 2;

答案 1 :(得分:1)

在C中你可以检查变量的总和

return a + b + .... + n >= 2;

如果在您的语言中从布尔到整数的隐式转换不是,您可以简单地将变量转换为整数并检查转换值的总和。