Vous devez écrire un programme ou une fonction qui prend un entier non négatif Nen entrée et génère ou renvoie deux entiers (négatif, zéro ou positif) Xet 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 Nil doit sortir une X Ypaire différente et chaque X Ypaire doit être sortie pour une entrée, Nc'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 Vet V Usont 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
0dé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 Net à générer un entier, Xune 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 11est-ce invalide parce que 11 est répété?