题目
话在代码里
#include <stdio.h>
int main()
{
int n, m, number, count = 1;//猴子个数,淘汰次序,当前猴子个数,验证淘汰次序所建立的参数
int i, pos;//循环用,和数组下标用。
while (1)
{
printf("\n请输入猴子个数,和淘汰次序\n");
scanf_s("%d %d", &n, &m);
if (n == 0 || m == 0)
{
return 0;
}
//初始化
number = n;
count = 1;
pos = 0;
int monkey[301]={0};
for (i = 0; i <n; i++)
{
monkey[i] = i + 1;
}
//开始判断。
while (number > 1)//代表剩余猴子只能有一个
{
if (monkey[pos] > 0)//已经被初始化(淘汰标记)为0的
{
if (count == m)//到淘汰次序
{
number--;
monkey[pos] = 0;
pos = (pos + 1) % n;//如果大于pos就重新来
count = 1;//相当于重置循环。
}
else
{
count++;
pos = (pos + 1) % n;//让数组成环。
}
}
else
{
pos = (pos + 1) % n;
}
}
for (i = 0; i < n; i++)//输出
{
if (monkey[i] > 0)
{
printf(" %d\n", monkey[i]);
}
}
}
return 0;
}