# include "stdlib.h"
# include "stdio.h"
struct Node
{
int data;
Node *next;
};
int main()
{
int n,k=1,m,i,s;
Node *p,*q,*head;
printf("约瑟夫问题——顺序表/n输入总人数n和退出编号m:/n"); // 输入总人数,退出编号
scanf("%d%d",&n,&m);
head=new Node; //确定头结点
p=head;
for(i=1;i<=n-1;i++) //赋初值
{
p->data=i;
p->next=new Node; //为下一个新建内存
p=p->next;
}
p->data=n; //最后一个单独处理
p->next=head; //指向头,形成循环链表
p=head;
while(p->data!=(p->next)->data) //p->data==(p->pNext)->data表示只剩下一个结点的
{
while(p->data !=k) //寻找编号为k的结点
p=p->next;
s=1;
if(m==1)
{
for(i=1;i<n;i++)
{
p=p->next ;
}
printf("最后退出的是第%d位人/n",p->data);
break;
}
else
{
while(p!=p->next)
{
for(i=1;i<m-1;i++)
p=p->next;
q=p->next;
p->next=q->next;
p=p->next;
delete q;
s++;
}
printf("最后退出的是第%d位人/n",p->data);
delete p;
}
}
system("Pause");
return 0;
}