猴子选大王

题目描述

有 nnn 只猴子,按顺时针方向围成 111 圈选大王(编号从 111 到 nnn),从第 111 号开始报数,一直数到 mmm,数到 mmm 的猴子退出圈外,剩下的猴子再接着从 111 开始报数。就这样,直到圈内只剩下一只猴子时,这个猴子就是猴王。编程输人 nnn 和 mmm,输出最后猴王的编号。

输入

每行是用空格分开的两个整数,第一个是 nnn,第二个是 mmm(0<m,n≤500 \lt m, n \le500<m,n≤50)。最后一行是 0 0

输出

对于每行输入数据(最后一行除外), 输出数据也是一行,即最后猴王的编号。

输入输出样例

样例输入 #1

复制

6 2 
12 4
8 3
0 0 

样例输出 #1

复制

5
1
7

解答:

#include<stdio.h>
int main()
{
	int a[55], n, m, i, num = 0, over = 0;
	while (scanf("%d %d",&n,&m)&&n != 0 && m != 0)
	{
		for (i = 1; i <= n; i++)
			a[i] = 1;
		i = 1;
		while (over != n - 1)
		{
			if (a[i] == 1)
				num++;
			if (num == m)
			{
				a[i] = 0;
				num = 0;
				over++;
			}
			i++;
			if (i == n+1)
				i = 1;
		}
		for (i = 1; i <= n; i++)
		{
			if (a[i] == 1)
			{
				printf("%d\n", i);
				break;
			}
		}
		over = 0;
	}
	return 0;
}

 


版权声明:本文为qq_47189506原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。