3

3つのブール値のうち少なくとも2つが真である場合、これが最も簡単な方法です。

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

10個のブール値があり、そのうちの少なくとも2つが真である必要がある場合、最適なソリューションは何でしょうか。前もって感謝します。

4

2 に答える 2

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;
于 2012-11-07T14:58:55.613 に答える
1

Cでは、変数の合計を確認するだけです。

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

ブール値から整数への暗黙の変換が言語にない場合は、変数を整数に変換して、変換された値の合計を確認するだけです。

于 2012-11-07T15:00:08.233 に答える