有n个人围成一圈,编号从1到N,从一号开始报数,报到k的人出队,下一个人重新从1开始循环报数,问最后剩下的人原来的编号。
int n,k,flag;
scanf("%d%d",&n,&k);
struct josephe
{
int data;
struct josephe *next;
};
struct josephe *head,*p,*before;
head=NULL;
int i;
for(i=1;i<=n;i++)
{
p=(struct josephe*)malloc(sizeof(struct josephe));
p->data=i;
if(head==NULL)
{
head=p;
}
else
before->next=p;
before=p;
}
before->next=head;
p=head;
flag=1;
do
{ flag++;
if(flag%k==0)
{
p->next=p->next->next;
}
p=p->next;
}
while(p->next!=p);
printf("%d",p->data);
|