猴子选大王 急得我头发都白了 请高手指点一下

来源:百度知道 编辑:UC知道 时间:2024/06/02 07:51:37
猴子选大王

有M个猴子围成一圈,每个有一个编号,编号从1到M。打算从中选出一个大王。经过协商,决定选大王的规则如下:从第一个开始,每隔N个,数到的猴子出圈,最后剩下来的就是大王。

要求:从键盘输入M,N,编程计算哪一个编号的猴子成为大王。

我小编了一下,但是总是输不出结果,请高手指点一下啊 谢谢了啊
#include<stdio.h>
void main()
{
int j,i,n,k,m,a[100]/*我定义的m小于100,你当然也可以定义成其他数字*/;
printf("input the number of mongkey :\n(monkey<100)\n");
scanf("%d",m);
j=m; /*j的作用是记录m的值,以便*/
printf("input the tao tai shu zi:\n(n<m)\n");
scanf("%d",n);
for(i=0;i<m;i++) /*for循环的作用是给m只猴子编号1到m*/
a[i]=i+1;
i=0;k=0;
while(m>1)
{
if(a[i]!=0)
k++;
if(k==n)
{
a[i]=0; /*这一步是淘汰那只数到n的猴子*/
k=0; /*然后给k赋初始值0,以便下一次淘汰*/
m--; /*m还有一个作用,就是计数,进行m—1次循环结束*/

j=m;这条语句有问题。而且我看楼主把这两个值混用,程序也比较乱。
我按照m是定值,j作变量给你改过了,程序中所有涉及j,m的地方楼主都该看看,我程序里面写了的。
你在你程序里面看看下面的语句,都和j,m有关的。
scanf("%d",&m);
j=m;
for(i=0;i<m;i++)
while(m>1)
m--;
if(i==m)
for(i=0;i<j;i++)
对照我的看看吧,呵呵,我也有点懒,就不跟你一一解释了。

其次。。。。
for(i=0;i<j;j++) /*输出大王的编号*/
if(a[i]!=0)
printf("the da wang shi :%d\n",a[i]);
getch();
这条语句有点问题...
显然应该是i++
改成for(i=0;i<j;i++)

还有就是...
scanf("%d",n);
scanf语句不是这么写的
scanf("%d",&n);才对。

我还有点疑惑的
楼主要求输入n<m是为什么呢?
感觉n不一定必须小于m吧...
个人看法

改过的程序如下:
#include<stdio.h>
void main()
{
int j,i,n,k,m,a[100];
printf("input the number of mongkey :\n(monkey<100)\n");
scanf("%d",&m);
j=m;
printf("input the tao tai shu zi:\n(n<m)\n");
scan