È necessario scrivere un programma o una funzione che accetta un numero intero non negativo N
come input e restituisce o restituisce due numeri interi (negativo, zero o positivo) X
e Y
.
I numeri interi sono intesi in senso matematico in quanto ce ne sono infiniti.
La funzione implementata deve essere biiettiva . Ciò significa che per ogni N
uscita deve essere emessa una X
Y
coppia diversa e ogni X
Y
coppia deve essere emessa per alcuni input, N
ovvero tutte le seguenti coppie dovrebbero essere emesse per alcuni N
:
...
┌─────┬─────┬────┬────┬────┐
│-2 -2│-2 -1│-2 0│-2 1│-2 2│
├─────┼─────┼────┼────┼────┤
│-1 -2│-1 -1│-1 0│-1 1│-1 2│
├─────┼─────┼────┼────┼────┤
... │0 -2 │0 -1 │0 0 │0 1 │0 2 │ ...
├─────┼─────┼────┼────┼────┤
│1 -2 │1 -1 │1 0 │1 1 │1 2 │
├─────┼─────┼────┼────┼────┤
│2 -2 │2 -1 │2 0 │2 1 │2 2 │
└─────┴─────┴────┴────┴────┘
...
Si noti che U V
e V U
sono coppie diverse se U!=V
.
Dettagli
- Se la tua lingua non supporta numeri interi arbitrariamente grandi, va bene, ma l'algoritmo dovrebbe funzionare con un tipo di dati intero arbitrariamente grande. Il tuo codice dovrebbe comunque supportare i valori di input per almeno
2^31-1
. - Se si sceglie di stampare o restituire l'output come stringa, non sono consentiti segni
0
o+
segni iniziali. Altrimenti la rappresentazione intera standard della tua lingua va bene.
Esempio
Se il compito fosse quello di fare una funzione biiettiva prendendo un numero intero non negativo N
e produrre un numero intero, la X
soluzione potrebbe essere la funzione
if (input mod 2 == 0) return N/2 else return -(N+1)/2
,
implementato in alcune lingue. Questa funzione ritorna X = 0 -1 1 -2 2...
per N = 0 1 2 3 4...
.
10=>11 12, 9=>10 11
questo non è valido perché 11 viene ripetuto?