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?

0voto

D.F.F Punkte 894

Eine einfache Lösung in f# (ohne "Tricks")

let rec f n =
    if n = 0 then 0
    elif n > 0 then
        if (f (n - 1) <> n) then n + 1
        else -(n - 1)
    else
        if (f (-(n - 1)) = n) then n - 1
        else -(n + 1)

0voto

Vishwanath Dalvi Punkte 33414

Eine Lösung in SQL Server

create function dbo.fn_fo(@num int) -- OUTER FUNCTION
RETURNS int
AS
begin
RETURN @num * -1
end
GO

create function dbo.fn_fi(@num int) -- INNER FUNCTION
RETURNS int
AS
begin
RETURN @num * -1
end
GO

declare @num AS int = -42
SELECT dbo.fn_fo(dbo.fn_fi(@num)) -- Gives (-42)

0voto

Darknight Punkte 2430

Vielleicht übersehe ich etwas?

Ist dies nicht etwas so Einfaches wie:

    function f(n)
    {
        if(n ==0 || n < 0){return n;}
        return n * -1;
    }

Bearbeiten:

also habe ich die Frage falsch gelesen, hm, also:

    function f(n)
    {
        if(!c(n,"z")&&!c(n,"n")){if(n==0){return "z"+n;}return "n"+n;}
        if( c(n,"z")){return 0;}return parseInt(n.replace("n",""))*-1;
    }
    function c(x,y){return x.indexOf(y) !==-1;}

hässlich, aber funktioniert.

0 Stimmen

Was sollte die Antwort für -1 sein?

1 Stimmen

Die Frage bezieht sich nicht auf f(n), sondern auf f(f(n)). f(f(-1)) sollte 1 ergeben, Ihre Lösung würde -1 ergeben

0 Stimmen

Das hängt sicherlich davon ab, wie Sie die Frage interpretieren.

0voto

David Stein Punkte 867

F(x) = der Punkt (x) um 90 Grad gegen den Uhrzeigersinn gedreht um den Ursprung in einem kartesischen 2D-Koordinatensystem. Eingaben mit nur einer Zahl x werden als (x, 0) angenommen, und Ausgaben mit y=0 werden als die einzelne Zahl x bereitgestellt.

object f: (object) x {
    if (x.length == 1)
        x = (x, 0)
    swap = x[0]
    x[1] = x[0]
    x[0] = -swap
    if (x[1] == 0)
        x = x[0]
    return x

0 Stimmen

Um welche Programmiersprache handelt es sich?

0 Stimmen

"wobei n ein 32-Bit-Wert ist vorzeichenbehaftete Ganzzahl Man kann nicht mit komplexen Zahlen arithmetisch rechnen.

0 Stimmen

@Maske: Es ist Pseudocode. Kann leicht in jede Sprache übersetzt werden.

0voto

Hameer Abbasi Punkte 1189

Ich gebe zu, dass ich schummeln würde, aber trotzdem die Anforderungen erfülle. Das ist Programmierkunst, nicht wirklich Mathematik. Es funktioniert für den gesamten Bereich, außer -2^31.

int f(int n)
{
    static bool eFlag = false; // Only executed once
    eFlag = !eFlag;
    return eFlag?-n: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