1 条题解
-
0
题目分析
这道题目要求我们生成一个特殊的幸运数字序列,其生成规则类似于筛法,但每次筛选的步长由当前幸运数字决定。具体来说,初始时有一个从2开始的连续整数序列,然后按照以下步骤生成幸运数字:
- 将序列的第一个数字作为幸运数字。
- 从序列中删除该数字后面的每隔 个数字( 为当前幸运数字的值)。
- 对剩下的序列重复上述过程,直到生成足够的幸运数字。
方法思路
- 初始化序列:生成一个足够大的初始序列,包含从2开始的连续整数。
- 筛选过程:使用一个标记数组
arr
来标记哪些数字被筛除。初始时所有数字未被筛除(arr[i] = 0
)。 - 生成幸运数字:遍历序列,对于每个未被筛除的数字,将其作为幸运数字,并标记其后面的每隔 个数字为筛除状态(
arr[k] = 1
)。 - 存储幸运数字:将生成的幸运数字存储在数组
lucky
中。 - 输出结果:根据输入的 ,直接输出第 个幸运数字。
解决代码
#include <iostream> using namespace std; #define N 35000 int main() { int arr[N]={0}; int lucky[N]; int i,j,k,n; n = 0; for (i=2;i<N;i++) { if(0 == arr[i]) { lucky[n++] = i; k = i+1; j = 0; while(k<N) { if(arr[k]==0) { j++; } if(i==j) { arr[k] = 1; j = 0; } k++; } } } while (cin>>n&&n) { cout<<lucky[n-1]<<endl; } return 0; }
- 1
信息
- ID
- 1553
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者