#include<iostream>
#include<stdio.h>
#include<string>
#include<string.h>
using namespace std;
struct node{
int data;
struct node* next;
};
int main()
{
node* head;//第一个元素
node* p;//遍历指针1
node* q;//遍历指针2
node* Delete;
node* Create;
//初始化
head = new node;
head->data=1;
head->next=nullptr;
int n,m;
cin>>n>>m;
p=head;
for(int i=2;i<=n;i++)
{
Create=new node;
Create->data=i;
Create->next=nullptr;//初始化
p->next=Create; //创造替身结点
p=Create;
}
p->next=head;
int count=1;int cnt=n;
q=head;
while(cnt)
{
if(count==m-1)//寻找待删除结点的前驱结点
{
cout<<q->next->data<<" ";
Delete=q->next;//删除q的下一个节点
q->next=Delete->next;
delete Delete;
count=0;
cnt--;//cnt为0代表 犹太人都完啦!
}
q=q->next;
count++;
}
return 0;
}
洛谷-P1996 约瑟夫问题
于 2024-06-20 18:01:21 首次发布