C语言求助 猴子大王问题

从键盘上输入两整数m,n,表示n只猴子顺时针围成一圈,从第一只猴子开始,顺时针数到第m只猴子,令其离开队伍,再数到第m只猴子,再令其离开,最后剩下的一只猴子为大王,输出大... 从键盘上输入两整数m,n,表示n只猴子顺时针围成一圈,从第一只猴子开始,顺时针数到第m只猴子,令其离开队伍,再数到第m只猴子,再令其离开,最后剩下的一只猴子为大王,输出大王编号 展开
 我来答
百度网友6ba8b63cb
2006-06-28 · TA获得超过232个赞
知道小有建树答主
回答量:98
采纳率:0%
帮助的人:120万
展开全部
给你一个我上周写的程序,不是键盘输入两个数,是define 的,你自己加上输入就可以了,只是有点小问题,看你自己怎么处理了。
#include<stdio.h>
#define N 50000
#define C 5
void main(){
int s[N],i,x=0,k,y=0;
for (i=0;i<N;i++) //给猴子赋个名字,其实指给数组付初值1--N,赋什么值不重要,关键是位置。
s[i]=i;
for(i=0;(i-y)!=N;i++) { //y是指当前不为-1的元素的位置,即没被下课的位置,在下面当y=i得到//
//当i-y=N,其实就是转了一圈还是这个数,也就是只剩下这个数了,所以就是找到了国王的时候,循环结束;//

if (s[i%N]!=-1){ //不是出局的位置就计数,所以会x++
x=x+1;
y=i; //将现在的i给y是为了确定下一个没出局的位置与这一个是否刚好一圈,以控制循环
if (x%C==0){
s[i%N]=-1; //当是C的倍数时,此数被下课,用-1来表示此位置出局
//for (k=0;k<N;k++) //显示当有一个位置出局后的情况,这个不重要,所以程序中可以不用
//printf("%d ",s[k]);
//printf("\n");
}
}
}
printf("经过第%d圈%d次报数最后的国王是第%d位",i/N+1,x,y%N+1);
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式