提示中也说了,这题可以用循环列表来实现,但是其实我也不怎么会哈哈哈哈,这题也同样可以用简单的基础语法来实现,只不过我们需要对一个循环语句做些手脚,让他头尾相连。
点击查看代码
#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;
}