链表一

来源:互联网 发布:知大局精业务创一流 编辑:程序博客网 时间:2024/05/29 14:48

问题:若干只猪排成一队,从2开始编号。每次排在最前面的为幸运猪(假设编号是i),

幸运猪及它后面的第i只,2*只,3*i只...的小猪出列,然后重复上述过程。

把幸运猪的编号从小到大排序,现在问第n个幸运猪的编号是多少? 0<n<3000


#include<stdio.h>#include<stdlib.h>#define N 33810int 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]);} }                    /*输入示例 4121020输出示例232983*/        


0 0
原创粉丝点击