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?

-2voto

Armstrongest Punkte 14684

In weniger als 50 Zeichen (C#)

int f(int n) { return (n <= 0) ? n : f(-n); }

Oder einfacher zu lesen:

static int f(int n) { 
  if (n <= 0)
    return n;
  else 
    return f(-n);
}

Zum Test

static void Main(string[] args) {
    for (int n = int.MinValue; n < int.MaxValue; n+=1) {
        Console.Out.WriteLine("Value: " + n + " Result: " + f(f(n)));
    }
}

Und es funktioniert (wenn ich die Frage richtig verstanden habe)

0 Stimmen

Das funktioniert nur, wenn n zunächst positiv (oder Null) ist. Die Frage besagt eindeutig Where n is a 32 bit *signed integer* , d. h. n kann auch negativ beginnen.

-4voto

Alex Punkte 551

Wie wäre es mit

int f(int n)
{
    return -abs(n);
}

1 Stimmen

Nun, man muss nur angeben, dass es nur mit positiven ganzen Zahlen funktioniert (0 <= n < 2^31).

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