如果反复在其自己的输出上调用该函数最终达到原始编号,则可以认为具有输入并提供输出的函数(或程序)具有一个循环。例如,采用以下功能:
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
可以容纳任何值的情况下保留以上属性。
对于非正整数的输入,该函数的行为没有任何限制,这些输入/输出将被忽略。
计分是按字节计的代码高尔夫球,最短的代码获胜。