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

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

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

Cam Punkte 14515

Gute Frage!

Ich habe etwa 35 Sekunden gebraucht, um darüber nachzudenken und es zu schreiben:

int f(int n){
    static int originalN=0;
    if (n!=0)
        originalN=n;
    return n-originalN;
}

0 Stimmen

Definitiv Betrug... aber es funktioniert definitiv für alle Werte von n und ist einfach. x) Zuerst dachte ich, es würde nur beim ersten Mal funktionieren, wenn man f(f(n)) (wegen der statischen Initialisierung), aber es funktioniert tatsächlich auch für jedes weitere Mal. +1

0 Stimmen

Danke :) Im Grunde genommen ist diese Antwort eine freche Antwort auf eine ebenso freche Frage. Sollte man aufgrund einer solchen Frage wirklich Informatiker/Softwareingenieure einstellen (oder nicht einstellen)?

1voto

phkahler Punkte 5602
int f(int n)
{
   static int x = 0;
   result = -x;
   x = n;
   return result;
}

Dies ist ein FIFO mit einem Eintrag und Negation. Natürlich funktioniert es nicht für die maximale negative Zahl.

0 Stimmen

Und es funktioniert nicht mit Threads, aber hey, wer braucht schon Threads? :)

1voto

missingfaktor Punkte 88801

Scala :

def f(x: Any): Any = x match {
  case i: Int => new { override def hashCode = -i }
  case i @ _  => i.hashCode
}

Dasselbe gilt für Java:

public static Object f(final Object x) {
  if(x instanceof Integer) {
    return new Object() {
      @Override 
      public int hashCode() {
        return -(Integer)x;
      }
    };
  }
  return x.hashCode();
}

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