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

Ben Blank Punkte 52357

Scheitert nicht an MIN_INT:

int f(n) { return n < 0 ? -abs(n + 1) : -(abs(n) + 1); }

0 Stimmen

@Stephan202, es scheint mir in Ordnung zu sein, zu wissen: f(0) = -1, f(-1) = 0

0 Stimmen

Aber jetzt schlägt es fehl bei f(f(-1))==-1

1voto

Peter Punkte 45640
f(n) { return IsWholeNumber(n)? 1/n : -1/n }

0 Stimmen

Ist 1/1 eine ganze Zahl? -1? Gibt -1 von mir. :)

1voto

Anthony Punkte 11717

Ich dachte, ich versuche es mal mit dieser Frage, ohne mir vorher die Antworten anderer Leute anzusehen:

#include <stdio.h>
#include <limits.h>
#include <stdlib.h>

int f(int n) {
    if(n > 0) {  
        if(n % 2)
            return -(++n);
        else {
            return (--n);

        }
    }
    else {
        if(n % 2)
            return -(--n);
        else {
            return (++n);

        }
    }
}

int main(int argc, char\* argv\[\]) {
    int n;
    for(n = INT\_MIN; n < INT\_MAX; n++) {
        int N = f(f(n));

        if(N != -n) {
            fprintf(stderr, "FAIL! %i != %i\\n", N, -n);
        }
    }
    n = INT\_MAX;
    int N = f(f(n));
    if(N != -n) {
        fprintf(stderr, "FAIL! n = %i\\n", n);
    }
    return 0;
}

Ausgabe: [nichts]

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)))

1voto

Scott Langham Punkte 55597

C++

struct Value
{
  int value;
  Value(int v) : value(v) {}
  operator int () { return -value; }
};

Value f(Value input)
{
  return input;
}

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