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); }