您的位置:首页 > 职场人生

一个关于布尔值的面试题

2015-11-26 20:03 459 查看
有一个人在StackOverflow问了一个问题,这个问题是他在面试的时候面试官给他提的问题。这个问题是:给定三个布尔变量a、b、c,如果其中至少有三分之二的变量是真的话,就返回真。下面是他的解决方法:

boolean atLeastTwo(boolean a, boolean b, boolean c) {
if ((a && b) || (b && c) || (a && c)) {
return true;
} else {
return false;
}
}


然后面试官让他改进这个解法使得其更为简洁。但是他不知道如何改进,所以他把这个问题贴在StackOverflow上。有一些人给出了非常有用的解法。我认为这值得我们讨论,以此来使我们在编程中对布尔值和布尔表达式有更深的理解。这里分享其中一些解决方法。

有人说如果你有如下代码段,

if (someExpression) {
return true;
} else {
return false;
}


那你应该修改为:

return someExpression;


所以这个解法可以改进为:

return ((a && b) || (b && c) || (a && c));


当然还有其他非常好的答案,如Tim Stone给出的答案:

return a ^ b ? c : a


个人认为这是最简洁的一种解法了。

我们也可以用卡诺图来做:

return a ? (b || c) : (b && c);


如果我们给布尔值设定为0和1(真为1),那我们有:

a&b | b&c | c&a
a + b + c >= 2


然而如果我们不能把布尔值设定为0和1,那么我们可以有:

int howManyBooleansAreTrue =
(a ? 1 : 0)
+ (b ? 1 : 0)
+ (c ? 1 : 0);

return howManyBooleansAreTrue >= 2;


还有一个更好的方法:

(a==b) ? a : c;


你也想亲自试一试吗?请把你的答案贴在下面。

【翻译自: http://www.pixelstech.net/article/1335793772-A-boolean-value-interview-question
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  boolean 面试