n个猴子,报数到m的猴子退出,直到剩下最后一个猴子,输出最后一个猴子在原来n个猴子中的排序
#include<stdio.h>
int main()
{
int m, n, a[1000], out=0, num=0, i=0;//out为出局的猴子
scanf("%d%d", &n, &m);
int* p;
for (i = 0; i < n; i++)
{
a[i] = 0;//将n个猴子赋值为0
}
p = a;//指针地址为a[0]
i = 0;
while (out != n - 1)//剩余最后一只猴子结束循环
{
if (*p == 0)
{
num++;
}
if (num == m)//报数到m时num重新计数,同时标记这个猴子
{
*p = 1;
num = 0;
out++;
}
p += 1;
i++;
if (i==n)//最后一个猴子计数完重新计数
{
p = &a[0];
i = 0;
}
}
p = &a[0];
for (i = 0; i < n; p++,i++)
{
if (*p == 0)
{
printf("%d", i + 1);//i和p同步增长,i从0计数,所以i值加1为最后一只猴子的编号
break;
}
}
return 0;
}