杀人游戏——约瑟夫环(不用链表)

用循环数组解决约瑟夫环问题

首先我们得知道约瑟夫环是什么,其实我们就可以通过杀人游戏来了解。/
游戏简介:相传有一个海盗,不仅仅掠夺商船的财务,而且还将船上的无辜人杀掉,有一天掳来的一批人中有一个数学家出了一个主意,让所有人站成一个圈开始报数,让海盗说一个恶魔数字,人开始遇到报的数与恶魔数字相同就拉出去杀掉,然后继续报数,遇到恶魔数字就拉出去杀掉,直到剩下一个人,数学家表示,不管说道哪个恶魔数,自己都能安全的留下,如果自己每次能安全留下就证明自己是上帝派来拯救他的人,就得放了这些人,最后数学家成功了,拯救了一批人。//
比如:有四个人,恶魔数字为2,他们的序号分别为1,2,3,4,则第一个被杀掉的人是2剩下1,2,4,第二个被杀的是4剩下1,3,第三个被杀掉的是3,1则是最后被杀掉。

那他是如何成功的呢?真的是上帝派来的吗!当然不是!!!

其实我们可以用C语言来了解这一现象
首先它是一个圈组成,那不停地在圈里转如何来实现呢?
如此我们就需要知道循环数组的实现:

   int array[N];
    for (int i = 0; i < N; i = (i+1)%N {
    }

接下来我们要思考循环停止的条件,以及如何表示并处理杀人
循环终止条件:没人可杀,即count为0;
处理杀人:初始人都赋值为0,被杀赋值为1;
则最后为的代码为
运行结果为
在这里插入图片描述

在这里插入图片描述
这是比较繁琐的代码,下一期将会写比较简洁的约瑟夫杀人游戏,谢谢!!!

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值