运用枚举和递推的基本思想,通过编程计算出双关系递推数列。设集合 M 定义如下:
1.初始 1∈M;
2.若x∈M,则有2x+1∈M,5x−1∈M;
3.再无其它的数属于M。
试求集合M中的元素从小到大排列后所得序列的第n项,其中n<10001。
补充下面的代码
#include
#include
int main(int argc, const char * argv[]) {
long long m[10001]; // 数组:从小到大保存的集合M的元素
int n; // 查询第n项
int p2; // F2(x)=2x+1的索引指针
int p5; // F5(x)=5x-1的索引指针
scanf("%d",&n);
m[1]=1;
p2=1;
p5=1;
// 请在这里补充代码,完成本关任务
/********* Begin *********/
/********* End *********/
printf("%lld\n",m[n]);
return 0;
}
代码补充如下:
#include <stdio.h>
int main(int argc, const char * argv[]) {
long long m[10001]; // 数组:从小到大保存的集合M的元素
int n; // 查询第n项
int p2; // F2(x)=2x+1的索引指针
int p5; // F5(x)=5x-1的索引指针
scanf("%d",&n);
m[1]=1;
p2=1;
p5=1;
// 请在这里补充代码,完成本关任务
/********* Begin *********/
int index = 2;
while (index <=n)
{
if(2*p2+1 < 5*p5-1)
{
m[index++] = 2*p2+1;
p2++;
}else
{
m[index++] = 5*p5-1;
p5++;
}
}
/********* End *********/
printf("%lld\n",m[n]);
return 0;
}