约瑟夫环`
#include <iostream>
#include<stdlib.h>
using namespace std;
struct Joseph {
int number;
int password;
struct Joseph *next;
};
typedef Joseph Node;
Node *init(int n, int array[]) {
int i = 1;
Node *head;
Node *current;
Node *next;
current = (Node *)(malloc(sizeof(Node)));
current->number = i;
current->password = array[i - 1];
head = current;
for (i = 2; i <= n; ++i) {
next = (Node *)(malloc(sizeof(Node)));
next->number = i;
next->password = array[i - 1];
current->next = next;
current = next;
}
current->next = head;
return head;
}
void function(Node *head, int len, int password) {
Node *pre;
Node *next;
Node *temp;
next = head;
for (int i = 1; i < len; ++i) {
pre = next->next;
next = next->next;
}
for (int i = 1; i <= len; ++i) {
for (int j = 1; j < password; ++j) {
pre = pre->next;
}
temp = pre->next;
next = temp->next;
password = temp->password;
cout << temp->number << endl;
pre->next = next;
free(temp);
}
}
int main() {
//环的长度
int len;
cout << "输入约瑟夫环的长度:";
cin >> len;
int array[len];
cout << "请输入m的初始值 m:";
int m;
cin >> m;
cout << "请输入每个人的密码: " << endl;
for (int i = 0; i < len; ++i) {
cin >> array[i];
}
Node *head = init(len, array);
function(head, len, m);
return 0;
}