Sha*_*bib 3 language-agnostic logic boolean-logic boolean-operations
如果三个布尔值中至少有两个是真的,这是最容易找到的方法:
BOOL a, b, c;
-(BOOL)checkAtLeastTwo
{
return a && (b || c) || (b && c);
}
Run Code Online (Sandbox Code Playgroud)
如果有10个布尔并且其中至少有两个需要是真的,那么最佳解决方案是什么?提前致谢.
您的原始实现是次优的 - 您可以只加总真值:
return (int)a + (int)b + (int)c >= 2;
Run Code Online (Sandbox Code Playgroud)
显然你可以将它扩展到10个变量:
return (int)a + (int)b + (int)c + (int)d + (int)e +
(int)f + (int)g + (int)h + (int)i + (int)j >= 2;
Run Code Online (Sandbox Code Playgroud)