Вы должны написать программу или функцию, которая принимает неотрицательное целое число в 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 повторяется?