面試題:布林變數

freebus發表於2020-03-12

下面這篇文章是從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部落格 ” ,連結:http://blog.itpub.net/31365439/viewspace-2679795/,如需轉載,請註明出處,否則將追究法律責任。

相關文章