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
求解约瑟夫问题: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]=034
count=0; //重新报号35
n1++; //有一个猴子退出36
}37
}38
}39

40
}

浙公网安备 33010602011771号