Powinieneś napisać program lub funkcję, która przyjmuje nieujemną liczbę całkowitą N
jako dane wejściowe i wyjściowe lub zwraca dwie liczby całkowite (ujemną, zerową lub dodatnią) X
i 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 N
musi wyprowadzać inną X
Y
parę i każda X
Y
para powinna być wyprowadzana dla niektórych danych wejściowych, N
tzn. 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 V
i V U
są 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
0
ani+
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ą N
i wyprowadzenie jednej liczby całkowitej, X
rozwią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 11
jest to nieprawidłowe, ponieważ 11 jest powtarzane?