Debería escribir un programa o función que tome un entero no negativo N
como entrada y salida o devuelva dos enteros (negativo, cero o positivo) X
y Y
.
Los enteros se entienden en sentido matemático ya que hay infinitos de ellos.
La función implementada tiene que ser biyectiva . Esto significa que para cada N
uno tiene que generar un X
Y
par diferente y cada X
Y
par debe emitirse para alguna entrada, N
es decir, todos los siguientes pares deben emitirse para algunos 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 │
└─────┴─────┴────┴────┴────┘
...
Tenga en cuenta que U V
y V U
son diferentes pares si U!=V
.
Detalles
- Si su idioma no admite enteros arbitrariamente grandes, está bien, pero su algoritmo debería funcionar con un tipo de datos entero arbitrariamente grande. Su código aún debe admitir valores de entrada al menos
2^31-1
. - Si elige imprimir o devolver la salida como cadena, no se permiten signos
0
ni+
signos iniciales. De lo contrario, la representación entera estándar de su idioma está bien.
Ejemplo
Si la tarea fuera hacer una función biyectiva tomando un número entero no negativo N
y generando un número entero, X
una solución podría ser la función
if (input mod 2 == 0) return N/2 else return -(N+1)/2
,
implementado en algún idioma. Esta función devuelve X = 0 -1 1 -2 2...
para N = 0 1 2 3 4...
.
10=>11 12, 9=>10 11
es válido porque se repite 11?