任务描述
本关任务:运用枚举和递推的基本思想,通过编程计算出双关系递推数列。设集合 M 定义如下:
1.初始 1∈M;
2.若x∈M,则有2x+1∈M,5x−1∈M;
3.再无其它的数属于M。
试求集合M中的元素从小到大排列后所得序列的第n项,其中n<10001。
相关知识
为了完成本关任务,你需要掌握:1.枚举算法的两种框架,2.递推算法的实施步骤,3.问题求解思路。
枚举算法的两种框架
枚举的本质就是从所有的备选答案中去查询正确的解。一般的,使用枚举算法需要满足两个基本条件:
- 备选答案的数量是确定的或是有限个数的;
- 备选答案的范围在求解之前也应该是确定的。
枚举算法有两种常见的框架:区间枚举和递增枚举。它们在不同的任务中都有着各自的优势。
区间枚举的主要思想是对于一个给定的闭区间,从该区间的下限一直逐个枚举到该区间的上限,其伪代码如下所示:
n=0;
for(k=<区间下限>;k<=<区间上限>;k++)
{
<运算操作序列>;
if(<约束条件>)
{
printf(&l