847 Stimmen

Bestimmung der Funktion f(f(n)) == -n

Eine Frage, die mir bei meinem letzten Vorstellungsgespräch gestellt wurde:

Eine Funktion entwerfen f , so dass:

f(f(n)) == -n

Wo n ist ein 32-Bit vorzeichenbehaftete Ganzzahl Sie können nicht mit komplexen Zahlen arithmetisch rechnen.

Wenn Sie eine solche Funktion nicht für den gesamten Zahlenbereich entwickeln können, entwickeln Sie sie für den größtmöglichen Bereich.

Irgendwelche Ideen?

6 Stimmen

Um welche Stelle ging es bei diesem Vorstellungsgespräch?

5voto

rein Punkte 31987

Eine einfache Python-Lösung, die dadurch möglich wurde, dass es keine Einschränkungen bezüglich der Ausgabe von f(x) gab, sondern nur f(f(x)):

def f(x):
    return (isinstance(x, tuple) and -x[0]) or (x,)

0 Stimmen

Als ich diese Frage zum ersten Mal hörte, kam mir sofort das Folgende in den Sinn.

1 Stimmen

(x) gibt zurück. x . Ich glaube, Sie meinen (x,)

0 Stimmen

Endlich. Ich kann nicht glauben, wie viele "Schummel"-Lösungen sich auf einen globalen Zustand verlassen, selbst bei Sprachen, bei denen der Zustand im Rückgabewert der Funktion selbst "gespeichert" werden könnte.

5voto

Alexandru Punkte 23739

Ich habe eine andere Lösung, die in der Hälfte der Fälle funktioniert:

def f(x):
    if random.randrange(0, 2):
        return -x
    return x

3voto

dwlz Punkte 10320

Meiner gibt in 50 % der Fälle die richtige Antwort, die ganze Zeit .

int f (int num) {
    if (rand () / (double) RAND_MAX > 0.5)
         return ~num + 1;
    return num;
}

0 Stimmen

Die Eingabe 7 kann im ersten Schritt zu -7+1 führen, was -6 oder 7 ist. Das ist zu 100% falsch, imho. Ich stimme ab.

0 Stimmen

Oh, tut mir leid, ich habe die Tilde ~num mit -num verwechselt. Okay - das ist richtig.

3voto

mateusza Punkte 4713
int f( int n ){
    return n==0?0:(n&1?n:-n)+(n<0?-1:1);
}

1 Stimmen

N&1 wird wie ein bool verwendet, ergibt aber einen int

3 Stimmen

@Dinah in der Annahme, dass es sich um C oder C++ handelt, ist das völlig in Ordnung

3voto

asmaier Punkte 10227

Dies ist auch eine Lösung (aber wir biegen die Regeln ein wenig ab):

def f(n):
    if isinstance(n,int):
        return str(n)
    else:
        return -int(n)

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