A46124.2024-12-GESP-C++-四级真题-编程题1-Recaman
普及-
GESP
通过率:0%
时间限制:1.00s
内存限制:512MB
题目描述
小杨最近发现了有趣的 Recaman 数列, 这个数列是这样生成的:
⋅ 数列的第一项a1是1;
⋅ 如果ak−1−k是正整数并且没有在数列中出现过,那么数列的第k项ak为ak−1−k,否则为ak−1+k。
小杨想知道 Recaman 数列的前n项从小到大排序后的结果。手动计算非常困难,小杨希望你能帮他解决这个问题。
输入格式
第一行,一个正整数n。
输出格式
一行,n个空格分隔的整数,表示 Recaman 数列的前n项从小到大排序后的结果。
输入输出样例
输入#1
5
输出#1
1 2 3 6 7
输入#2
8
输出#2
1 2 3 6 7 12 13 20
说明/提示
样例解释:
对于样例1,n=5:
⋅a1=1;
⋅a1−2=−1,不是正整数,因此a2=a1+2=3;
⋅a2−3=0,不是正整数,因此a3=a2+3=6;
⋅a3−4=2,是正整数,没有在数列中出现过,因此a4=2;
⋅a4−5=−3,不是正整数,因此a5=a4+5=7
a1,a2,a3,a4,a5从小到大排序后的结果为1 2 3 6 7
。
数据范围:
对于所有数据点,保证1≤n≤3000。