3つのブール値のうち少なくとも2つが真である場合、これが最も簡単な方法です。
BOOL a, b, c;
-(BOOL)checkAtLeastTwo
{
return a && (b || c) || (b && c);
}
10個のブール値があり、そのうちの少なくとも2つが真である必要がある場合、最適なソリューションは何でしょうか。前もって感謝します。
3つのブール値のうち少なくとも2つが真である場合、これが最も簡単な方法です。
BOOL a, b, c;
-(BOOL)checkAtLeastTwo
{
return a && (b || c) || (b && c);
}
10個のブール値があり、そのうちの少なくとも2つが真である必要がある場合、最適なソリューションは何でしょうか。前もって感謝します。
元の実装は最適ではありません。真の値を合計するだけです。
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;
Cでは、変数の合計を確認するだけです。
return a + b + .... + n >= 2;
ブール値から整数への暗黙の変換が言語にない場合は、変数を整数に変換して、変換された値の合計を確認するだけです。