n个人从第k个人开始报数,第m个人出局,求出圈顺序
代码:
#include<bits/stdc++.h>
using namespace std;
typedef struct node
{
int data;
struct node *next;
}node,*plist;
void Josephus(int n,int k,int m)
{
plist p=NULL,curr=NULL,r=NULL;
p=(plist)malloc(sizeof(node));
p->data=0;
p->next=p;
curr=p;
for(int i=1;i<n;i++)
{
plist t=(plist)malloc(sizeof(node));
t->data=i;
t->next=curr->next;
curr->next=t;
curr=t;
}
//plist lala=(plist)maclloc(sizeof(node));
r=curr;
while(k--)
{
r=p;
p=r->next;
/*
lala=curr->next;
curr=lala;
*/
}///最后p所在的位置一定就是第一个位置开始的地方
while(n--)
{
for(int i=m-1;i>=1;i--)//注意这个地方是m-1
{
r=p;
p=p->next;
}//删除r节点
r->next=p->next;
cout<<"->"<<p->data;
free(p);
p=r->next;
}
}
int main()
{
Josephus(13,4,3);
}