题目:有 n 个人围成一圈,顺序排号。从第一个人开始报数(从 1 到 3 报数),凡报到 3 的人退出圈子,问最后留下的是原来第几号的那位。
核心思想
流程图:
代码部分
#define M 8
int main()
{
int mans[M], k=0,i,sumk=0;
int* p;
//把数组所有元素替换为排序数字(代表有人)
//初始化数组
p = mans;
for (i = 0; i < M; i++)
{
*(p+i) = i + 1;
}
//进行循环击杀
i = 0;
while (1)
{
if (*(p+i) != 0)
{
k++;
if (k == 3)
{
*(p+i) = 0;
k = 0;
sumk++;
//判定游戏完成度
if (sumk == (M-1))
{
printf("准备结束");
break;
}
}
if ((p + i) == &p[M - 1])
i = -1;
i++;
}
else
{
if ((p + i) == &p[M - 1])
i = -1;
i++;
}
//进行多次数组循环遍历
}
//输出最后幸存的元素
p = mans;
for (i = 0; i < M; i++)
{
if (*(p + i) != 0)
{
printf("%d", *(p + i));
return 0;
}
}
}