📄 main.cpp
字号:
/*************************************************************************************
36. 猴子选大王:
① N 只猴子站成一行,每隔 M 只从头到尾报数,反复进行,报过数的退出,打
印每次退出的猴子的编号,直到剩下一只为止。
② N 只猴子站成一行,每 M 只报数。先从头到尾,报到尾后,再返回从尾到头
报数,打印每次方向及过程,直到剩下二只时,以排到后面的(指报数方向)为大王。
③ N 只猴子围成一圈,从第 P 个开始,每隔 M 只报数,打印每次过程,只剩下
一个时为大王。
***********************************************************************************/
#include <stdio.h>
#include <malloc.h>
void main()
{
int *monkey;
int i,k,counter=0;
int N,M;
printf("请输入猴子的个数N和报数相隔M:\n");
scanf("%d%d",&N,&M);
monkey = (int*)malloc(N*sizeof(int));
for(i=0; i<N; i++)
monkey[i] = 1;
i=0; k=0;
while(counter != N-1)
{
if(monkey[i])
{
if((++k)%M == 0)
{
monkey[i] = 0;
counter++;
}
}
if(++i==N)
i=0;
}
for(i=0; i<N; i++)
{
if(monkey[i])
{
printf("%d\n",i);
break;
}
}
free(monkey);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -