面试题:布尔变量


转自:http://coolshell.cn/articles/2514.html

作者:陈皓

 

面试题:布尔变量


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

1

2

3

4

5

6

7

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

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

        return true;

    else {

        return false;

    }

}

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

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

1

2

3

4

5

   if (someExpression) {

       return true;

   else {

       return false;

   }

你应该改成:

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,则:

1

2

3

4

5

6

int howManyBooleansAreTrue =

(a ? 1 : 0)

+ (b ? 1 : 0)

+ (c ? 1 : 0);

 

return howManyBooleansAreTrue >= 2;

欢迎你留下你的想法。

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值