一本通c++约瑟夫问题

2023-03-14,

#include<bits/stdc++.h>
using namespace std;
long long m,nn;
struct n
{
long long da;
n *next;
};
n *h,*p,*r;
int main(){
cin>>nn>>m;
h=new n;
h->da=1;h->next=NULL;r=h;//头指针初始化
for(int i=2;i<=nn;i++)
{
p=new n;
p->da=i;
p->next=NULL;
r->next=p;
r=p;
}//建构链表
r->next=h;r=h;//开始寻找
for(int f=1;f<=nn;f++)//从第一个人开始
{
for(int k=1;k<=m-2;k++) r=r->next;//因为要删第 m 个人,所以从第 m-2 个人开始删 …r->next是第 m-1 个人的地址,给第 m-2 个人
cout<<r->next->da<<" ";//输出第 m-1 个人的号码
r->next=r->next->next;//第 m-1 个人的地址是第 m-1+1=m 个人的地址
r=r->next;//第 m-2 个人的地址是第 (上一行m-1+1=m) 个人的地址
}
return 0;
}

一本通c++约瑟夫问题的相关教程结束。

《一本通c++约瑟夫问题.doc》

下载本文的Word格式文档,以方便收藏与打印。