# include <stdio.h>
# define n 21 //总人数
# define m 3 //淘汰的人所报的数
struct person
{
int num; //num存放当前报数人原来所在的位置
int next; //next表示下一个人的位置
}link[n+1]; //建立21个‘人’
int main (void)
{
int count,i,h;
for (i=1;i<=n;++i) //给每个人的位置赋值
{
if (i == n)
link[i].next = 1;
else
link[i].next = i+1;
link[i].num = i;
}
h = n; //h表示报数人所在的位置
count = 0; //count 表示被淘汰人的个数
while(count < n-1)
{
i = 0;
while(i != m)
{
h = link[h].next; //link[h].next表示下一个人的位置
if (link[h].num) //如果没有被淘汰 ++i
++i;
}
printf ("%d ",link[h].num); //输出淘汰人的位置
link[h].num = 0;
++count;
}
for (i=1;i<=n;++i)
{
if (link[i].num)
printf ("\n%d\n",link[i].num); //输出最后剩下的人
}
return 0;
}
约瑟夫环--数组实现
最新推荐文章于 2022-10-14 19:23:44 发布