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
11void 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
11void 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}