#include using namespace std; typedef struct LNode { int data; struct LNode *next; }LNode,*linkList; void CreateCirList(linkList &L,int m) {//后插法创建单向循环链表 L=new LNode; L->next=NULL; L->data=1; linkList r=L; for(int i=2;i<=m;i++) { linkList p=new LNode; p->data=i; p->next=NULL; r->next=p; r=p; } r->next=L; //尾结点的指针指向首元结点,单向循环链表建成 L=r; //L需要指向尾结点,以防n=1时第一个需要删除的是首元结点,不易得到前驱结点 } void MonkeyKing(linkList &L,int n) {//猴子选大王(约瑟夫问题) linkList p = L; while(p->next != p) { for(int i=1; i<n-1; i++) { p = p->next; } linkList temp = p->next; p->next = temp->next; delete temp; p = p->next; } cout << p->data << endl; } int main() { int m,n; while(cin>>m>>n) { if(n==0&&m==0) break; linkList L; CreateCirList(L,m); MonkeyKing(L,n); } return 0; }


原文地址: https://www.cveoy.top/t/topic/qiT 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录