N个人围成一圈顺序编号,从1号开始按1、2、3......顺序报数,报p者退出圈外,其余的人再从1、2、3开始报数,报p的人再退出圈外,以此类推。
请按退出顺序输出每个退出人的原序号。
输入只有一行,包括一个整数N(1<=N<=3000)及一个整数p(1<=p<=5000)。
按退出顺序输出每个退出人的原序号,数据间以一个空格分隔,但行尾无空格。
在这里给出一组输入。例如:
7 3
3 6 2 7 5 1 4
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
上代码:
#include
using namespace std;
struct Lnode//构造链表
{
int data;
Lnode *next;
};
int main()
{
Lnode *h,*r,*s,*q;
int i,N,p;
cin>>N>>p;
if(N<1||N>3000)
cout<<"ERROR";
if(p<1||p>5000)
cout<<"ERROR";
h=new Lnode;
r=h;
for(i=1;i<=N;i++)
{s=new Lnode;
s->data=i;
r->next=s;
r=s;
}
s->next=h->next;
i=1;r=h;
while(s!=s->next)
{
for(i=1;inext;
r=s;
}
cout<next->data<<' ';
q=r->next;
s->next=q->next;
r=s;
delete(q);
}
cout<data;
delete(h);
return 0;
}