求解约瑟夫问题

 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}
原文地址:https://www.cnblogs.com/yuxi/p/645370.html