//标志数组法;核心:所有成员标志为1;退出标志0;
//思路:
//1.定义n,m;
//2.定义计数器,计人器,标志旗;
//3.开始游戏:计数器从1~m,计人器只要有人出圈就+1;直到count==n时候输出最后一个编号;
#include <stdio.h>
int main()
{
int n;
scanf("%d", &n);
int count = 0; // 计数器(出圈的人)
int step = 0; // 计数器;1~3
int a[n + 1];
for (int j = 1; j <= n; j++)
a[j] = 1;
int i = 1; // 从第1个人开始游戏
// 开始游戏
while (count != n - 1)
{
// 如果当前人未出圈
if (a[i] != 0)//这里一定要有,我们是先判断,再计数的
{
// 开始计数
step++;
// 如果计数值为3
if (step == 3)
{
// 当前人出圈
a[i] = 0;
// 重置计数器
step = 0;
// 出圈人数+1
count++;
}
}
// 移动到下一个人
i++;
// 如果已经到最后一个人,重置为第一个人
if (i > n)
i = 1;
}
// 输出剩下的人的编号
for (int j = 1; j <= n; j++)
{
if (a[j] != 0)
{
printf("%d\n", j);
break;
}
}
return 0;
}
PTA约瑟夫环求解最后一个人的编码
最新推荐文章于 2024-10-06 14:10:45 发布
该篇文章介绍了如何使用C语言通过数组和标志数组法实现一个游戏,玩家按顺序出圈,当有人出圈时计数器加一,直到所有人出圈。
摘要由CSDN通过智能技术生成