#include<iostream>
using namespace std;
struct Node
{
int val;//存放数值
int tag;//0表示元素删除,1表示元素存在
};
int num;//记录要出列的序号
int fun(int m, int num)
{
if (m == 1)//递归出口,若仅剩一人,则输出其编号
return m;
return (fun(m - 1, num) + num - 1) % m + 1;
}
int main()
{
cout << "请输入队列中的人数:" << endl;
int m, seq = 1;//m表示当前队列总人数,seq表示当前队列成员的报数
cin >> m;
Node *a = (Node *)malloc((m + 1) * sizeof(Node));//下标从1开始,第一个单元空出
cout << "队列中的人员编号为:" << endl;
for (int i = 1; i <= m; i++)
{
a[i].val = i;
a[i].tag = 1;//初始化队列
cout << a[i].val << " ";
}
cout << endl;
cout << "请输入每次报数要求出列的序号:" << endl;
cin >> num;
cout << "最后人员编号为:" << endl;
cout << fun(m, num) << endl;;
system("pause");
return 0;
}
递归解决约瑟夫环问题
最新推荐文章于 2023-06-04 22:47:31 发布