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;
}
该程序实现了n个猴子报数到m后退出的游戏,直到最后只剩下一只猴子。通过模拟报数过程,找出在原始序列中最后一个存活的猴子的编号。程序使用了一个整型数组a来表示猴子,用0和1分别表示未出局和已出局,通过指针p遍历并更新数组状态。最终输出了最后一个存活的猴子的编号。
5650

被折叠的 条评论
为什么被折叠?



