回复 9楼 lol1234
											我想了一下 我觉得我的想法有问题 因为万一要报的数字比猴子数多我的算法就错了。。。  哎。。。只用数组感觉好难做啊										
					
	
				
											count = (count + 1) % n
可以实现循环										
					
	
	
	
			
程序代码:// 猴子选大王问题,用数组来解决
#include<stdio.h>
void main()
{
    int temp[100];
    int n;      // 存放猴子总数(不要大于99)
    int m;      // 报数的最大值
    int i;      // 循环体计数变量
    int out;    // 记录出局的猴子数
    int count;  // 记录当前报数
    // 直接录入数据了,没有进行录入检错。。。
    fprintf(stdout, "请输入猴子总数:\n");
    fscanf(stdin, "%d", &n);
    fprintf(stdout, "请输入报数最大值:\n");
    fscanf(stdin, "%d", &m);
    // 初始化
    for (i = 1; i <= n; i++) // 从temp[1]到temp[n]易理解
    {
        temp[i] = 1;
    }
    count = 0;
    out = 0;
    // 这是计数过程,最终只剩下一个猴子。
    for (i = 1; out != n - 1; i++)
    {
        if (n + 1 == i)
        { // 循环计数的基础
            i = 1;
        }
        if (1 == temp[i])
        { // 查到没出局的猴子,报数加1
            count++;
        }
        if (count == m)
        { // 碰到出局猴子,0表示出局,出局数加1,重新报数
            temp[i] = 0;
            out++;
            count = 0; 
        }
    }
    // 输出每个猴子状态,便于验证
    for (i = 1; i <= n; i++)
    {
        fprintf(stdout, "%-4d", temp[i]);
        if (i % 10 == 0)
        {
            putchar(10);
        }
    }
    putchar(10);
    // 输出结果
    for (i = 1; temp[i] != 1; i++)
    {
    }
    fprintf(stdout, "猴王是第%d只猴子。\n", i);
}

程序代码:#include <stdio.h>
int main()
{
    int i,m,n,z,counter=1;
    int a[50];
    printf("输入猴子数n(不大于50)和报数终止数m(不小于2)\n");
    scanf("%d%d",&n,&m);
    z=n;
    for(i=0;i<n;i++)
    {
        a[i]=1;
    }
    while(z!=1)
    {
        for(i=0;i<n;i++)
        {
            if(a[i] != 0)
            {
                a[i] = counter++;
            } 
            if(a[i] == m)
            {
                a[i] = 0;
                counter = 1;
                z--;
                break;
            }
        }
    }
    for(i=0;i<n;i++)
    {
        if(a[i]!=0)
        {
            printf("猴子大王是第 %d 个\n",i+1);
        }
    }
}