问题:若干只猪排成一队,从2开始编号。每次排在最前面的为幸运猪(假设编号是i),
幸运猪及它后面的第i只,2*只,3*i只...的小猪出列,然后重复上述过程。
把幸运猪的编号从小到大排序,现在问第n个幸运猪的编号是多少? 0<n<3000
#include<stdio.h>
#include<stdlib.h>
#define N 33810
int next[N];
int a[3001];
int main()
{
int i,j,n,m,temp,p,len=0;
scanf("%d",&n);
for(i=1;i<N;i++)
next[i]=i+1;
next[0]=2;
next[N-1]=1;
next[1]=1;
while(n--)
{
scanf("%d",&m);
if(m>len)
while(len!=m)
{
temp=0;
p=a[len++]=next[temp];
while(temp!=1)
{
next[temp]=next[next[temp]]; //将每隔p个剔除
for(i=1;i<p&&temp!=1;i++) //寻找之后第p个元素
temp=next[temp];
}
}
printf("%d\n",a[m-1]);
}
}
/*
输入示例
4
1
2
10
20
输出示例
2
3
29
83
*/