1 #include <iostream>
2 using namespace std;
3
4 struct Node
5 {
6 int data;
7 Node* next;
8 };
9
10 void Josephus(int total, int m , int n)
11 {
12 Node* p = NULL;
13 Node* cur = NULL;
14 Node* temp = NULL;
15
16 p = (Node*)malloc(sizeof(Node));
17 p->data = 1;
18 p->next = p;
19 cur = p;
20
21 for(int i=2; i<=total; i++)
22 {
23 Node* local = (Node*)malloc(sizeof(Node));
24 local->data = i;
25 local->next = cur->next;
26 cur->next = local;
27 cur = local;
28 }
29
30 while(--m)
31 {
32 temp = p;
33 p = p->next;
34 }
35
36 while(total--)
37 {
38 for(int i=n; --i; temp = p, p = p->next);
39 temp->next = p->next;
40 cout<<(p->data)<<" is out"<<endl;
41 free(p);
42 p = temp->next;
43 }
44 }
45
46
47 int main()
48 {
49 Josephus(10,1,3);
50 return 0;
51 }
2 using namespace std;
3
4 struct Node
5 {
6 int data;
7 Node* next;
8 };
9
10 void Josephus(int total, int m , int n)
11 {
12 Node* p = NULL;
13 Node* cur = NULL;
14 Node* temp = NULL;
15
16 p = (Node*)malloc(sizeof(Node));
17 p->data = 1;
18 p->next = p;
19 cur = p;
20
21 for(int i=2; i<=total; i++)
22 {
23 Node* local = (Node*)malloc(sizeof(Node));
24 local->data = i;
25 local->next = cur->next;
26 cur->next = local;
27 cur = local;
28 }
29
30 while(--m)
31 {
32 temp = p;
33 p = p->next;
34 }
35
36 while(total--)
37 {
38 for(int i=n; --i; temp = p, p = p->next);
39 temp->next = p->next;
40 cout<<(p->data)<<" is out"<<endl;
41 free(p);
42 p = temp->next;
43 }
44 }
45
46
47 int main()
48 {
49 Josephus(10,1,3);
50 return 0;
51 }