Проверьте, верно ли хотя бы два из трех логических значений - PullRequest
568 голосов
/ 19 июня 2010

Один из интервьюеров недавно задал мне этот вопрос: при наличии трех логических переменных a, b и c верните true, если хотя бы две из трех верны.

Мое решение следующее:

boolean atLeastTwo(boolean a, boolean b, boolean c) {
    if ((a && b) || (b && c) || (a && c)) {
        return true;
    }
    else{
        return false;
    }
}

Он сказал, что это можно еще улучшить, но как?

Ответы [ 63 ]

0 голосов
/ 22 июня 2010

Я считаю, что использование простых булевых операторов (a || b) && (b || c) хорошо и просто.

Вы можете поменять любую из 3 букв на любую из двух других, и этовсе то же выражение.

0 голосов
/ 05 мая 2018

Еще один:

return a? b||c : b&&c
0 голосов
/ 01 февраля 2012

Простейшая форма, использующая троичные операторы для решения проблемы:

return a ? (b ? true : c) : (b ? c : false);

Вы также можете захотеть инвестировать в поиск решения, используя двойное отрицание требования, то есть вместо по крайней мере двухистинные значения, вы должны удовлетворять условию не более одного ложного значения.

...