纯模拟题,用链表模拟.....
源代码:
#include <iostream>
struct px
{
int i;//当前点的值
int n;//指向下一点,起连接作用
};
struct px link[100010];
int ans[100010];
int main ()
{
int n,k,p,i,j,head,tail;
while(scanf("%d%d%d",&n,&k,&p)!=EOF)
{
for(i=1;i<=k;i++)//建立初始链
{
link[i].i=i;
if(i==k)
link[i].n=-1;
else
link[i].n=i+1;
}
head=1;tail=k;//初始化
for(i=1;i<=k;i++)
{
if(i%n==0)
ans[link[head].i]=1;//把当前最上层的点标记
head=link[head].n;//起始点往后移
for(j=1;j<=p;j++)
{
link[tail].n=head;//最后的点连接起始点
tail=link[head].i;//最后点向前移
head=link[head].n;//起始点往后移
}
}
for(i=1;i<=k;i++)
if(ans[i])
printf("%d/n",i);
}
return 0;
}