1
/*
2
求解约瑟夫问题:n个猴子要选大王,方法是:所有猴子安1,2,
,n编号围坐一圈,
3
从第一号开始报数,凡报到m号的退出圈外,如此循环报数,直到圈内剩下一只猴子(大王)
4
*/
5
6
#include "stdafx.h"
7
#include <stdio.h>
8
#define n 10 //猴子的数量
9
#define m 4 //报到m号的退出圈外
10
11
void main()
12
{
13
int a[n],i,count=0,n1=0; //a[n]猴子的数量
14
15
printf("出队前:");
16
for(i=0;i<n;i++)
17
{
18
a[i]=i+1;
19
printf("%d ",a[i]);
20
}
21
22
printf("\n出队后:");
23
24
while(n1<n) //n1用来计算退出到圈外的猴子个数
25
{
26
for(i=0;i<n;i++)
27
{
28
if(a[i]!=0) //没有退出到圈外的猴子报数
29
count++; //报数
30
if(count==m) //报到m号的猴子退出
31
{
32
printf("%d ",a[i]);
33
a[i]=0; //报到m号的猴子退出,即设定a[i]=0
34
count=0; //重新报号
35
n1++; //有一个猴子退出
36
}
37
}
38
}
39
40
}

2


3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40
