介绍
当然,我们遇到了很多序列挑战,因此这是另一个挑战。
1, 3, 5, 4, 10, 7, 15, 8, 20, 9, 18, 24, 31, 14, 28, 22, ...
这是通过改组常规迭代产生的:
[1] 2 3 4 5 6 7 8
序列的第一项是1
。之后,我们将重新排列序列,直到使用了左侧的所有术语。改组有规律right - left - right - left - ...
。由于的左侧没有术语1
,因此没有改组。我们得到以下内容:
2 [3] 4 5 6 7 8 9
在第i 次迭代中,我们丢弃第i 个项目并将其放在我们的序列中。这是第二次迭代,因此我们丢弃第二项。序列变为:1, 3
。对于我们的下一个迭代,我们将使用上面的模式对当前迭代进行洗牌。我们从第i 个项目的右边取出第一个未使用的项目。这恰好是4
。我们将其添加到新的迭代中:
4
现在,我们将在第i 个项目的左侧获取第一个未使用的项目。这是2
。我们将其添加到新的迭代中:
4 2
由于第i 个项目的左侧没有任何项目,因此我们将其余序列附加到新的迭代中:
4 2 [5] 6 7 8 9 10 11 ...
这是我们的第三次迭代,因此我们将丢弃第三项5
。这是我们序列中的第三项:
1, 3, 5
要获得下一个迭代,只需重复该过程即可。如果不清楚,我已经制作了一个gif:
gif花了我比写实际帖子花了更长的时间
任务
- 给定一个非负整数n,输出序列的前n个项
- 您可以提供功能或程序
- 这是代码高尔夫球,因此以最少的字节提交为准!
测试用例:
Input: 4
Output: 1, 3, 5, 4
Input: 8
Output: 1, 3, 5, 4, 10, 7, 15, 8
Input: 15
Output: 1, 3, 5, 4, 10, 7, 15, 8, 20, 9, 18, 24, 31, 14, 28
注意:输出中不需要逗号。例如,您可以使用换行符,或输出列表等。