//望你珍摄,吻你万千
#include<iostream>
using namespace std;
struct Node
{
int data;
struct Node* next;
};
class JosephRing
{
public:
JosephRing(int n);
void Joseph(int m);
private:
Node* rear;
};
JosephRing::JosephRing(int n)
{
Node* s = nullptr;
rear = new Node;
rear->data = 1; rear->next = rear;
for (int i = 2; i <= n; i++) {
s = new Node; s->data = i;
s->next = rear->next;
rear->next = s;
rear = s;
}
}
void JosephRing::Joseph(int m) {
Node* pre = rear, * p = rear->next;
int count = 1;
cout << "出环顺序为:";
while (p->next != p) {
if (count < m) {
pre = p; p = p->next;
count++;
}
else {//已经到达密码值
cout << p->data << " ";
pre->next = p->next;
delete p;
p = pre->next;
count = 1;
}
}
cout << p->data << endl;
delete p;
}
int main() {
int n, m;
cout << "输入约瑟夫环的长度:";
cin >> n;
cout << "请输入密码:";
cin >> m;
JosephRing R(n);
R.Joseph(m);
return 0;
}