乙個關於布林值的面試題

2021-07-08 09:31:27 字數 1100 閱讀 2687

有乙個人在stackoverflow問了乙個問題,這個問題是他在面試的時候面試官給他提的問題。這個問題是:給定三個布林變數a、b、c,如果其中至少有三分之二的變數是真的話,就返回真。下面是他的解決方法:

boolean atleasttwo(boolean a, boolean b, boolean c)  else 

}

然後面試官讓他改進這個解法使得其更為簡潔。但是他不知道如何改進,所以他把這個問題貼在stackoverflow上。有一些人給出了非常有用的解法。我認為這值得我們討論,以此來使我們在程式設計中對布林值和布林表示式有更深的理解。這裡分享其中一些解決方法。

if (someexpression)  else
那你應該修改為:

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;
你也想親自試一試嗎?請把你的答案貼在下面。

【翻譯自:

前端面試題3 型別轉換布林值

var x newboolean false if x var y boolean 0 if y 的顯示結果是?答案 hi 解析 new boolean false 會生成乙個新的物件 boolean false 而在if判斷中,會進行布林值和轉換,只有 0,0,nan,null,undefined...

關於乙個面試題目

曾經碰到乙個面試題目,誰能給出標準答案呢?200個小孩圍乙個圈,從頭開始1到4報數,報到4這個數的退出圓圈,最後乙個留在圈裡的小孩編號是多少?在網上看到很多人給出的答案是 標準答案.public static void main string args while list.size 4 syste...

關於unsiged char 的乙個面試題

剛才在孫曉亮的部落格上看到一道c語言面試題,說是乙個小問題,但我在看完標題之後都感覺出來他要考察變數型別表示越界問題了,因為以前在電腦鼠的演算法程式中有過類似的問題,當時姚司還問過,但當時沒想出來,後來才恍然大悟的。下面把這道題貼出來大家一塊看看吧。首先宣告一下 寫這個不是為了裝b,本人c語言功底不...