3

在三个布尔值中至少有两个为真的情况下,这是找出最简单的方法:

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

如果有十个布尔值并且其中至少两个需要为真,那么最佳解决方案是什么?提前致谢。

4

2 回答 2

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;
于 2012-11-07T14:58:55.613 回答
1

在 C 中,您只需检查变量的总和

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

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

于 2012-11-07T15:00:08.233 回答