#include <stdio.h>
#include <stdlib.h>
int josephus(int N, int M)
{
struct node { int player_id; struct node *next; };
struct node *p, *q;
int i, count;
// Create circular linked list containing all the players:
p
= q
= (struct node
*)malloc(sizeof(struct node
));
p->player_id = 1;
for (i = 2; i <= N; ++i) {
p
->next
= (struct node
*)malloc(sizeof(struct node
)); p = p->next;
p->player_id = i;
}
p->next = q;//Close the circular linkedlist by having the last node point to the 1st
// Eliminate every M-th player as long as more than one player remains:
printf("M=%d, Elimination:\n", M
);
for (count = N; count > 1; --count) {
printf("%d\n",p
->next
->player_id
); p->next = p->next->next;
for (i = 0; i < M - 1; ++i)
p = p->next;
}
return p->player_id;
}
int jos(int N)
{
int i=1;
int res;
while(1)
{
res=josephus(N,i);
if(res==13)
return i;
else
i++;
}
}
int main()
{
int N=17;
printf("The solution for N=17: M=%d\n",jos
(N
)); return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCmludCBqb3NlcGh1cyhpbnQgTiwgaW50IE0pCnsKICAgIHN0cnVjdCBub2RlIHsgaW50IHBsYXllcl9pZDsgc3RydWN0IG5vZGUgKm5leHQ7IH07CiBzdHJ1Y3Qgbm9kZSAqcCwgKnE7CiBpbnQgaSwgY291bnQ7CgovLyBDcmVhdGUgY2lyY3VsYXIgbGlua2VkIGxpc3QgY29udGFpbmluZyBhbGwgdGhlIHBsYXllcnM6CgpwID0gcSA9IChzdHJ1Y3Qgbm9kZSopbWFsbG9jKHNpemVvZihzdHJ1Y3Qgbm9kZSkpOwoKcC0+cGxheWVyX2lkID0gMTsKCmZvciAoaSA9IDI7IGkgPD0gTjsgKytpKSB7CiAgICBwLT5uZXh0ID0gKHN0cnVjdCBub2RlKiltYWxsb2Moc2l6ZW9mKHN0cnVjdCBub2RlKSk7CiAgICBwID0gcC0+bmV4dDsKICAgIHAtPnBsYXllcl9pZCA9IGk7Cn0KCnAtPm5leHQgPSBxOy8vQ2xvc2UgdGhlIGNpcmN1bGFyIGxpbmtlZGxpc3QgYnkgaGF2aW5nIHRoZSBsYXN0IG5vZGUgcG9pbnQgdG8gdGhlIDFzdCAgIAoKLy8gRWxpbWluYXRlIGV2ZXJ5IE0tdGggcGxheWVyIGFzIGxvbmcgYXMgbW9yZSB0aGFuIG9uZSBwbGF5ZXIgcmVtYWluczoKcHJpbnRmKCJNPSVkLCBFbGltaW5hdGlvbjpcbiIsIE0pOwoKZm9yIChjb3VudCA9IE47IGNvdW50ID4gMTsgLS1jb3VudCkgewoJcHJpbnRmKCIlZFxuIixwLT5uZXh0LT5wbGF5ZXJfaWQpOwkgIAoJcC0+bmV4dCA9IHAtPm5leHQtPm5leHQ7CgkKICAgZm9yIChpID0gMDsgaSA8IE0gLSAxOyArK2kpCiAgICBwID0gcC0+bmV4dDsgICAgIAogICAgIH0gICAgCgkgcmV0dXJuIHAtPnBsYXllcl9pZDsKCn0KCmludCBqb3MoaW50IE4pCnsKCWludCBpPTE7CglpbnQgcmVzOwoJd2hpbGUoMSkKCXsKCQlyZXM9am9zZXBodXMoTixpKTsKCQlpZihyZXM9PTEzKQoJCSAgcmV0dXJuIGk7CgkJZWxzZSAKCQkgIGkrKzsKCX0KfQoKaW50IG1haW4oKQp7CglpbnQgTj0xNzsKCXByaW50ZigiVGhlIHNvbHV0aW9uIGZvciBOPTE3OiBNPSVkXG4iLGpvcyhOKSk7CglyZXR1cm4gMDsKfQ==
M=1, Elimination:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
M=2, Elimination:
1
3
5
7
9
11
13
15
17
4
8
12
16
6
14
10
M=3, Elimination:
1
4
7
10
13
16
3
8
12
17
6
14
5
15
11
2
M=4, Elimination:
1
5
9
13
17
6
11
16
7
14
4
15
10
8
12
3
M=5, Elimination:
1
6
11
16
5
12
2
9
17
10
4
15
14
3
8
13
M=6, Elimination:
1
7
13
3
10
17
9
2
12
6
4
16
5
11
8
15
M=7, Elimination:
1
8
15
6
14
7
17
11
5
3
2
4
10
16
9
12
The solution for N=17: M=7