Recamán的顺序定义如下:
或使用伪代码:
a(0) = 0,
if (a(n - 1) - n) > 0 and it is not
already included in the sequence,
a(n) = a(n - 1) - n
else
a(n) = a(n - 1) + n.
第一个数字是(OEIS A005132):
0, 1, 3, 6, 2, 7, 13, 20, 12, 21, 11, 22, 10, 23, 9, 24, 8, 25, 43, 62, 42, 63, 41, 18, 42
如果研究此序列,您会发现其中存在重复项,例如a(20) = a(24) = 42
(0索引)。如果序列中前面至少有一个相同的数字,我们将其称为重复数字。
挑战:
取整数输入k,然后输出前k个重复数字(按在Recamán序列中被发现重复的顺序)或仅输出第k个数字。
这第一个重复的数字是:
42, 43, 78, 79, 153, 154, 155, 156, 157, 152, 265, 261, 262, 135, 136, 269, 453, 454, 257, 258, 259, 260, 261, 262
注意事项:
- 如果a(0)... a(n-1)中没有相同的数字,即使a(n + m)== a(n),a(n)也不会算作重复项。
- 42将在43之前,因为其重复出现在43的重复之前
- 序列未排序
- 此序列中也有重复的元素。例如,第12号和第23号都是262(0索引)。
测试用例(0索引)
k Output
0 42
9 152
12 262
23 262
944 5197
945 10023
10000 62114
这是代码高尔夫,因此每种语言中最短的代码胜出!
鼓励解释!
2
相关
—
ngm
为什么
—
Luis Mendo
43
以前不输出42
?它首先出现在Recamán的序列中。您是说首先输出一个首先被发现是重复的输出吗?
我也看到了最近流行的math.SE问题:P
—
orlp
@orlp是吗?您可以链接到它吗?我还没看过……
—
Stewie Griffin