Powinieneś napisać program lub funkcję, która przyjmuje nieujemną liczbę całkowitą Njako dane wejściowe i wyjściowe lub zwraca dwie liczby całkowite (ujemną, zerową lub dodatnią) Xi Y.
Liczby całkowite są rozumiane w sensie matematycznym, ponieważ jest ich nieskończenie wiele.
Zaimplementowana funkcja musi być bijectywna . Oznacza to, że dla każdego Nmusi wyprowadzać inną X Yparę i każda X Ypara powinna być wyprowadzana dla niektórych danych wejściowych, Ntzn. Dla niektórych z nich powinny być wyprowadzane wszystkie następujące pary 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 │
└─────┴─────┴────┴────┴────┘
...
Zauważ, że U Vi V Usą różnymi parami jeśli U!=V.
Detale
- Jeśli twój język nie obsługuje dowolnie dużych liczb całkowitych, to dobrze, ale twój algorytm powinien działać z dowolnie dużym typem danych. Twój kod powinien nadal obsługiwać wartości wejściowe przynajmniej
2^31-1. - Jeśli zdecydujesz się wydrukować lub zwrócić wynik jako ciąg znaków, nie będą dozwolone żadne znaki wiodące
0ani+znaki. W przeciwnym razie standardowa reprezentacja liczb całkowitych w twoim języku jest w porządku.
Przykład
Jeśli zadaniem byłoby utworzenie funkcji bijectywnej przyjmującej nieujemną liczbę całkowitą Ni wyprowadzenie jednej liczby całkowitej, Xrozwiązaniem może być funkcja
if (input mod 2 == 0) return N/2 else return -(N+1)/2,
zaimplementowane w jakimś języku. Ta funkcja zwraca wartość X = 0 -1 1 -2 2...dla N = 0 1 2 3 4....

10=>11 12, 9=>10 11jest to nieprawidłowe, ponieważ 11 jest powtarzane?