问题 I: 零基础学C/C++172——猴子选大王


提示中也说了,这题可以用循环列表来实现,但是其实我也不怎么会哈哈哈哈,这题也同样可以用简单的基础语法来实现,只不过我们需要对一个循环语句做些手脚,让他头尾相连。

点击查看代码
#include<stdio.h>
#include<string.h>
#include<math.h>
int main()
{
	int t = 1, n, k, m, j, i, a[1010], b[1010]={0}, sum = 0;
	scanf("%d %d", &n, &k);
	for (i = 1; i <= n; i++)
	{
		if (i == n)//头尾相连,那么如果循环语句走到尾,我们就把他变成头
		{
			i = 0;
		}
		if (b[i] == 1)//利用数组b来记录,如果该猴子退出,就将改编号的猴子对应数组b的下标变为1
		{
			continue;
		}
		a[i] = t;//利用t来模拟猴子的数数
		t++;
		if (t-1 == k)//此时即对应的第i个猴子报道了k,应退出
		{
			t = 1;//从一开始重新报数
			b[i] = 1;
			sum++;//记录退出猴子的个数
		}
		if (sum == n - 1)//直到猴子只有一个,即为王
		{
			break;
		}
	}
	for (i = 1; i <= n; i++)
	{
		if (b[i] == 0)
		{
			break;
		}
	}
	printf("%d", i);
	return 0;
}
posted @ 2022-11-08 17:49  美羊羊给沸羊羊搬砖  阅读(171)  评论(0)    收藏  举报