一个关于布尔值的面试题
2015-11-26 20:03
459 查看
有一个人在StackOverflow问了一个问题,这个问题是他在面试的时候面试官给他提的问题。这个问题是:给定三个布尔变量a、b、c,如果其中至少有三分之二的变量是真的话,就返回真。下面是他的解决方法:
然后面试官让他改进这个解法使得其更为简洁。但是他不知道如何改进,所以他把这个问题贴在StackOverflow上。有一些人给出了非常有用的解法。我认为这值得我们讨论,以此来使我们在编程中对布尔值和布尔表达式有更深的理解。这里分享其中一些解决方法。
有人说如果你有如下代码段,
那你应该修改为:
所以这个解法可以改进为:
当然还有其他非常好的答案,如Tim Stone给出的答案:
个人认为这是最简洁的一种解法了。
我们也可以用卡诺图来做:
如果我们给布尔值设定为0和1(真为1),那我们有:
然而如果我们不能把布尔值设定为0和1,那么我们可以有:
还有一个更好的方法:
你也想亲自试一试吗?请把你的答案贴在下面。
【翻译自: http://www.pixelstech.net/article/1335793772-A-boolean-value-interview-question】
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】
相关文章推荐
- 只有程序员看的懂的面试圣经|如何拿下编程面试
- 下一次技术面试时要问的 3 个重要问题
- PHP程序员面试 切忌急功近利(更需要注重以后的发展)
- C#常见算法面试题小结
- js的Boolean对象初始值示例
- php 面试碰到过的问题 在此做下记录
- asp.net 面试+笔试题目第1/2页
- 简介JavaScript中Boolean.toSource()方法的使用
- asp.net 面试 笔试题目[附答案]第1/3页
- 基于JavaScript 数据类型之Boolean类型分析介绍
- Python中使用Boolean操作符做真值测试实例
- php中的boolean(布尔)类型详解
- 面试:(设计,架构)
- PHP中级面试经历
- 戴维营教育2015年iOS暑期班笔试面试基础考核题
- 一次有意思的面试
- 程序员编程面试取胜的8个技巧
- PHP相关面试中最经常涉及的12个问题
- 面试时,你会问面试官哪些问题?
- asp.net面试中的四十一个经典题目