main.cpp

来自「我做的一些C语言练习题,里面一共有76道题目,主要用到一些计算机常用的算法,如:」· C++ 代码 · 共 49 行

CPP
49
字号
/*************************************************************************************

  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 + =
减小字号Ctrl + -
显示快捷键?