Можно сказать, что функция (или программа), которая принимает входные данные и обеспечивает выходные данные, имеет цикл, если повторный вызов функции на ее собственном выходе в конечном итоге достигает исходного числа. Например, возьмите следующую функцию:
Input: n 1 2 3 4 5 6
Output: f(n) 5 7 1 3 4 9
Если мы начинаем с n=1
, f(n)=5
, f(f(n))=f(5)=4
, f(f(f(n)))=f(4)=3
, f(f(f(f(n))))=f(3)=1
.
Это написано (1 5 4 3)
. Поскольку в этом цикле 4 уникальных числа, это цикл длины 4.
Ваша задача - написать программу или функцию с циклами любой возможной длины. То есть должен быть цикл длины 1, длины 2 и так далее.
Кроме того, ваша функция / программа должна быть от положительных целых чисел до положительных целых чисел, и она должна быть биективной , то есть для каждого возможного выходного значения должно быть ровно одно входное значение по всем положительным целым числам. Другими словами, функция / программа должна вычислять перестановку натуральных чисел.
Подробности: разрешена любая стандартная система ввода / вывода, включая STDIN, STDOUT, аргумент функции, возврат и т. Д. Стандартные лазейки запрещены.
Вам не нужно беспокоиться об ограничениях типов данных - перечисленные выше свойства нужно хранить только в предположении, что, например, int
или float
может содержать любое значение.
Нет ограничений на поведение функции на входах, которые не являются положительными целыми числами, и эти входы / выходы будут игнорироваться.
Подсчет очков - это код в байтах, самый короткий код выигрывает.