Ви повинні написати програму або функцію, яка приймає невід'ємне ціле число N
як вхід і вихід або повертає два цілих числа (від'ємне, нульове або додатне) X
і Y
.
Цілі цілі мають на увазі математичний сенс, оскільки їх нескінченно багато.
Реалізована функція повинна бути біективною . Це означає, що для кожної з N
них повинна виводитися інша X
Y
пара, і кожна X
Y
пара повинна виводитися на деякий вхід, N
тобто всі наступні пари повинні бути виведені для деяких 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 │
└─────┴─────┴────┴────┴────┘
...
Зауважте, що U V
і V U
є різні пари, якщо U!=V
.
Деталі
- Якщо ваша мова не підтримує довільно великих цілих чисел, це добре, але ваш алгоритм повинен працювати з довільно великим цілим типом даних. Ваш код все одно повинен підтримувати вхідні значення принаймні
2^31-1
. - Якщо ви вирішили надрукувати або повернути вихід у вигляді рядка, то жодні провідні знаки
0
та+
знаки заборонені. Інакше стандартне ціле представлення вашої мови добре.
Приклад
Якщо завдання полягатиме в тому, щоб зробити біективну функцію, приймаючи невід'ємне ціле число N
і вивести одне ціле число, X
рішенням може бути функція
if (input mod 2 == 0) return N/2 else return -(N+1)/2
,
реалізовані якоюсь мовою. Ця функція повертається X = 0 -1 1 -2 2...
для N = 0 1 2 3 4...
.
10=>11 12, 9=>10 11
, це недійсно, оскільки 11 повторюється?