有一个众所周知的定理,任何置换都可以分解为一组循环。您的工作是编写最短的程序。
输入:
两行。第一个包含数字N
,第二个包含以空格分隔N
的范围内的不同整数[0,N-1]
。这些整数表示N
元素的排列。
输出:
排列中每个循环一行。每行应是按循环顺序用空格分隔的整数列表。
循环可以以任何顺序输出,并且每个循环可以从任意位置开始输出。
范例1:
8
2 3 4 5 6 7 0 1
此输入编码排列0-> 2、1-> 3、2-> 4、3-> 5、4-> 6、5-> 7、6-> 0、7-> 1。这分解成如下循环:
0 2 4 6
1 3 5 7
同样有效的输出将是
5 7 1 3
2 4 6 0
范例2:
8
0 1 3 4 5 6 7 2
有效输出:
0
1
4 5 6 7 2 3
@Keith N的最大值是多少?
—
fR0DDY 2011年
J中的3个字符:
—
Eelvex
>C.
假设N <1000。
—
基思·兰德尔
置换通常是从1向上计数,而不是0。
—
博士贝利萨留
数学家从1开始计数,计算机科学家从0开始计数:)
—
Keith Randall