一道麵試題:布爾變量
下麵這篇文章是從StackOverflow來的。LZ麵試的時候遇到了一道麵試題:“如果有三個Bool型變量,請寫出一程序得知其中有2個以上變量的值是true”,於是LZ做了下麵的這樣的程序:
boolean atLeastTwo(boolean a, boolean b, boolean c) { if ((a && b) || (b && c) || (a && c)) { return true; } else { return false; } }
麵試官接著問到,請對你的這個程序改進一下,但LZ不知道怎麼改進,於是上StackOverflow上問了一下,下麵是StackOverflow上的眾網友的回答。再往下看的時候,希望你自己能先想一想怎麼改進。
有人說,如果你有下麵這樣的代碼?
if (someExpression) { return true; } else { return false; }
你應該改成:
return someExpression;
所以,LZ的代碼應該寫成:
return ((a && b) || (b && c) || (a && c));
當然,解法不單單隻有一種,還有下麵的這些解決:
1)使用卡諾圖
return a ? (b || c) : (b && c);
2)使用異或
return a ^ b ? c : a
3)按照字麵
(a?1:0)+(b?1:0)+(c?1:0) >= 2 a&&b || b&&c || a&&c
4)把Bool當成0和1
a&b | b&c | c&a a + b + c <= 2
5)如果bool不能當成0和1,則:
int howManyBooleansAreTrue = (a ? 1 : 0) + (b ? 1 : 0) + (c ? 1 : 0); return howManyBooleansAreTrue >= 2;
歡迎你留下你的想法。
最後更新:2017-04-03 18:51:55