#include<iostream>
using namespace std;
struct Node
{ int data; Node *pNext;};
int main(){
int n, k, m, i;//从k开始报数,数到m出列
struct Node *p, *q, *first;
cin >> n>>k>>m;
if(m==1) { int left; left=k-1; if(left==0) left=n; cout<<left; return 0; }
first = (Node*)new Node;
p = first;first->data=1;
for (i = 2; i <= n; i++) {
q=new Node; q->data=i;p->pNext =q;p=p->pNext;
}
p->pNext = first;
p = first;
for(i=1;i<=k-1;i++) //寻找报数的起点
p=p->pNext;
while (p != p->pNext) //只剩下一个结点的
{
for (i = 1; i<m - 1; i++)
{
p = p->pNext;
}
q = p->pNext; //q为要出队的元素
p->pNext=q->pNext;
delete q;
p=p->pNext;
}
cout << p->data <<endl;
return 0;
}
约瑟夫环
最新推荐文章于 2024-04-16 12:11:58 发布