回复 9楼 lol1234
我想了一下 我觉得我的想法有问题 因为万一要报的数字比猴子数多我的算法就错了。。。 哎。。。只用数组感觉好难做啊
2014-04-12 00:27
2014-04-12 00:42
程序代码:// 猴子选大王问题,用数组来解决
#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);
}

2014-04-12 01:24
2014-04-12 01:39
程序代码:#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);
}
}
}
2014-04-12 10:21
2014-04-12 14:35
2014-04-12 14:38
2014-04-12 14:40
2014-04-13 17:45

2014-04-13 18:16