613 Stimmen

Prüfen, ob mindestens zwei von drei Booleschen Werten wahr sind

Ein Interviewer hat mir kürzlich folgende Frage gestellt: Geben Sie bei drei booleschen Variablen a, b und c true zurück, wenn mindestens zwei der drei Variablen wahr sind.

Meine Lösung folgt:

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

Er sagte, dass dies noch verbessert werden kann, aber wie?

173 Stimmen

Integrieren Sie die Return-Anweisung.

82 Stimmen

atLeastTwo(iWantYou, iNeedYou, imEverGonnaLoveYou)

1 Stimmen

Wäre es C gewesen, hätte man die Booleschen Werte einfach addieren können. Vielleicht war es das, woran er dachte, aber er vergaß, dass Java das nicht kann?

3voto

Matt Billenstein Punkte 658

Das liest sich irgendwie besser:

if (a) {
    return b || c;
} 
else {
    return b && c;
}

3voto

Ben Manes Punkte 8438

Zu Ihrer Information: Dies ist nur das Übertragsbit eines Volladdierers. In Hardware könnte man den logischen Aufwand nutzen, um die optimale Schaltung auf der Grundlage der verschiedenen booleschen Ausdrücke zu bestimmen. Ich würde vermuten, dass die traditionelle XOR-Lösung mehr Aufwand erfordern würde als der weniger prägnante Ausdruck, den der Poster präsentiert hat.

3voto

Dimitre Novatchev Punkte 234995

So sollte es sein:

(a || b && c) && (b || c && a)

Außerdem, wenn true wird automatisch umgewandelt in 1 y false à 0 :

(a + b*c) * (b + c*a) > 0

3voto

user373826 Punkte 1

In Ruby:

[a, b, c].count { |x| x } >= 2

Die in JRuby auf der JavaVM ausgeführt werden könnte. ;-)

3voto

stinky472 Punkte 6629

Er ist wahrscheinlich nicht auf der Suche nach etwas kompliziert wie bitweise Vergleich Operatoren (in der Regel nicht kompliziert, aber mit Booleschen, ist es extrem seltsam, bitweise Operatoren zu verwenden) oder etwas, das sehr roundabout wie Konvertierung in int und summieren sie ist.

Die direkteste und natürlichste Art, dieses Problem zu lösen, ist ein Ausdruck wie der folgende:

a ? (b || c): (b && c)

Wenn Sie möchten, können Sie es in eine Funktion einbauen, aber es ist nicht sehr kompliziert. Die Lösung ist logisch knapp und effizient.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X