Vous devez écrire un programme ou une fonction qui prend un entier non négatif N
en entrée et génère ou renvoie deux entiers (négatif, zéro ou positif) X
et Y
.
Les entiers sont signifiés au sens mathématique car ils sont infiniment nombreux.
La fonction implémentée doit être bijective . Cela signifie que pour chaque N
il doit sortir une X
Y
paire différente et chaque X
Y
paire doit être sortie pour une entrée, N
c'est-à-dire que toutes les paires suivantes doivent être sorties pour certaines 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 │
└─────┴─────┴────┴────┴────┘
...
Notez que U V
et V U
sont des paires différentes si U!=V
.
Détails
- Si votre langue ne prend pas en charge les entiers arbitrairement grands, c'est bien, mais votre algorithme devrait fonctionner avec un type de données entier arbitrairement grand. Votre code doit toujours prendre en charge les valeurs d'entrée pendant au moins
2^31-1
. - Si vous choisissez d'imprimer ou de renvoyer la sortie sous forme de chaîne, aucun signe de
0
début ni+
signe n'est autorisé. Sinon, la représentation entière standard de votre langue est correcte.
Exemple
Si la tâche consistait à créer une fonction bijective prenant un entier non négatif N
et à générer un entier, X
une solution pourrait être la fonction
if (input mod 2 == 0) return N/2 else return -(N+1)/2
,
mis en œuvre dans une langue. Cette fonction revient X = 0 -1 1 -2 2...
pour N = 0 1 2 3 4...
.
10=>11 12, 9=>10 11
est-ce invalide parce que 11 est répété?