约瑟夫环(循环链表+队列两种写法)
作者:
巷港
,
2022-07-23 20:20:37
,
所有人可见
,
阅读 201
使用数组模拟循环链表实现
#include <bits/stdc++.h>
using namespace std;
const int N = 60;
int ne[N];
int n;
int T;
int main()
{
cin>>T;
while (T--)
{
cin>>n;
for (int i=1;i<n;i++) ne[i]=i+1;
ne[n]=1;
int p=n;
for (int i=0;i<n;i++)
{
p=ne[ne[p]];
cout<<ne[p]<<" ";
ne[p]=ne[ne[p]];
}
cout<<endl;
}
return 0;
}
使用队列queue实现
#include <bits/stdc++.h>
using namespace std;
const int N = 60;
int T;
int n;
void fun(int n)
{
queue<int>q;
for (int i=1;i<=n;i++) q.push(i);
int cnt=0;
while (q.size())
{
int t=q.front();
q.pop();
cnt++;
if (cnt==3)
{
cout<<t<<" ";
cnt=0;
}
else
{
q.push(t);
}
}
}
int main()
{
cin>>T;
while (T--)
{
cin>>n;
fun(n);
cout<<endl;
}
return 0;
}