3

在至少三分之二的布爾是真實的情況下,這是找出最簡單的方法:檢查至少兩個十個布爾都是真實的

BOOL a, b, c; 
-(BOOL)checkAtLeastTwo 
{ 
    return a && (b || c) || (b && c); 
} 

會有什麼,如果最優解有十個布爾人,至少有兩個需要是真的?提前致謝。

回答

5

您最初的實現是次優的 - 你可以總結真值:

return (int)a + (int)b + (int)c >= 2; 

很明顯,你可以擴展到10個變量:

return (int)a + (int)b + (int)c + (int)d + (int)e + 
     (int)f + (int)g + (int)h + (int)i + (int)j >= 2; 
+0

這個工作假設有問題的語言提升布爾值爲整數值1--我認爲對於大多數常見的現代語言來說這是真的,但值得指出這個假設。我似乎還記得至少有一種語言,布爾真正提升爲全1位模式,所以在這種情況下這顯然不起作用(不能把我的手指放在當前的語言上,它甚至可能沒有一直是一個「真正的」,但學術玩具或其他...)。即使是這樣的話,你可以用條件或其他東西來重寫這個模式...... – twalberg

+1

@twalberg,當然是......但是我認爲在這種情況下它不應該用任何語言編寫你自己的轉換方法: ) –

+1

是的 - 對於所有類C語言(除此之外還有更多),這是正確的,OP顯然使用Objective-C。但對於真實不等於1的語言來說,相同的一般方法仍然可行,並進行一些調整。 –

1

在C語言中,你可以只檢查的總和你的變量

return a + b + .... + n >= 2; 

如果從布爾值到整數的隱式轉換不在你的語言中ge,您可以簡單地將您的變量轉換爲整數並檢查轉換值的總和。

相關問題