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?

1voto

Ates Goral Punkte 132294

JavaScript-Einzeiler:

function f(n) { return ((f.f = !f.f) * 2 - 1) * n; }

0 Stimmen

Gewinde-was? JavaScript ist single-threaded, zumindest auf Browsern

1voto

Alin Punkte 51

Eine andere Möglichkeit besteht darin, den Zustand in einem Bit zu halten und ihn im Falle negativer Zahlen mit Sorgfalt in der binären Darstellung umzudrehen... Grenze ist 2^29

int ffn(int n) {

    n = n ^ (1 << 30); //flip the bit
    if (n>0)// if negative then there's a two's complement
    {
        if (n & (1<<30))
        {
            return n;
        }
        else
        {
            return -n;
        }
    }
    else
    {
        if (n & (1<<30))
        {
            return -n;
        }
        else
        {
            return n;
        }
    }

}

1voto

Sam Punkte 694
number f( number n)
{
  static count(0);
  if(count > 0) return -n;
  return n;
}

f(n) = n

f(f(n)) = f(n) = -n

3 Stimmen

Ich glaube, Sie vermissen irgendwo eine count++

0 Stimmen

@sth - lol! Ja, es wird Zeit für eine Tasse Tee und einen Schokoladenkeks!

1voto

Steven Punkte 12883
int f(int n) {
    return ((n>0)? -1 : 1) * abs(n);
}

0 Stimmen

Funktioniert für alle int-Werte, außer MIN_INT (da MIN_INT * -1 > MAX_INT), daher gibt es keinen gültigen Rückgabewert dafür.

1 Stimmen

Sicherlich gibt dies nur f(n)=-n zurück? dann ist f(f(n)) = n, nicht -n, wie die Frage lautet

1voto

RCIX Punkte 37016

Wie wäre es damit:

do
    local function makeFunc()
        local var
        return function(x)
            if x == true then
                return -var
            else
                var = x
                return true
            end
        end

    end
    f = makeFunc()
end
print(f(f(20000)))

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