ITPub博客

首页 > IT职业 > IT职场 > 面试题:布尔变量

面试题:布尔变量

原创 IT职场 作者:freebus 时间:2020-03-12 11:44:42 0 删除 编辑

下面这篇文章是从StackOverflow来的。LZ面试的时候遇到了一道面试题:“如果有三个Bool型变量,请写出一程序得知其中有2个以上变量的值是true”,于是LZ做了下面的这样的程序:


1 boolean atLeastTwo(boolean a, boolean b, boolean c) {

2    if ((a && b) || (b && c) || (a && c)) {

3        return true;

4    } else {

5        return false;

6    }

7 }

面试官接着问到,请对你的这个程序改进一下,但LZ不知道怎么改进,于是上StackOverflow上问了一下,下面是StackOverflow上的众网友的回答。再往下看的时候,希望你自己能先想一想怎么改进。



有人说,如果你有下面这样的代码?


1   if (someExpression) {

2       return true;

3   } else {

4       return false;

5   }

你应该改成:


1 return someExpression;

所以,LZ的代码应该写成:


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

当然,解法不单单只有一种,还有下面的这些解决:


1)使用卡诺图


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

2)使用异或


1 return a ^ b ? c : a

3)按照字面


1 (a?1:0)+(b?1:0)+(c?1:0) >= 2

1 a&&b || b&&c || a&&c

4)把Bool当成0和1


1 a&b | b&c | c&a

1 a + b + c <= 2

5)如果bool不能当成0和1,则:


1int howManyBooleansAreTrue =

2(a ? 1 : 0)

3+ (b ? 1 : 0)

4 + (c ? 1 : 0);

5

6 return howManyBooleansAreTrue >= 2;

欢迎你留下你的想法。


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31365439/viewspace-2679795/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2016-06-22

  • 博文量
    34
  • 访问量
    19638