#include<stdio.h>
#include<iostream>
#include<stdlib.h>
using namespace std;
typedef struct node{
int data;
struct node*next;
}node1,*node2;
void solution(int n,int m,int k)
{
node2 L;
L=(node1*)malloc(sizeof(node));
L->next=NULL;
L->data=1;
node2 r;
r=L;
for(int i=2;i<=n;i++)
{
node2 p;
p=(node1*)malloc(sizeof(node));
p->data=i;
if(i<n)
{
p->next=NULL;
}
else
{
p->next=r;
}
L->next=p;
L=p;
}
node2 sign1,sign2;
sign1=L;
sign2=r;
if(m>1)
for(int h=1;h<m;h++)
{
sign1=sign1->next;
sign2=sign2->next;
}
while(sign1!=sign2)
{
if(k==1)//注意考虑从第一个人开始报数,报1出列的情况;
{
cout<<sign2->data;
sign1->next=sign2->next;
sign2=sign2->next;
}
else
{
for(int f=1;f<k;f++)
{
sign1=sign1->next;
sign2=sign2->next;
}
cout<<sign2->data;
sign1->next=sign2->next;
sign2=sign2->next;
}
}
cout<<sign1->data<<endl;
}
int main()
{
int n,m,k;
cout<<"请输入总人数n\n";
cin>>n;
cout<<"请输入从第几个位置开始m\n";
cin>>m;
cout<<"请输入报数到的位置k\n";
cin>>k;
cout<<"请输出出列的顺序\n";
solution(n,m,k);
return 0;
}
单链表的典型问题-约瑟夫圈
最新推荐文章于 2021-05-23 04:11:45 发布