本文主要是介绍杀人游戏——约瑟夫环(不用链表),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
用循环数组解决约瑟夫环问题
首先我们得知道约瑟夫环是什么,其实我们就可以通过杀人游戏来了解。/
游戏简介:相传有一个海盗,不仅仅掠夺商船的财务,而且还将船上的无辜人杀掉,有一天掳来的一批人中有一个数学家出了一个主意,让所有人站成一个圈开始报数,让海盗说一个恶魔数字,人开始遇到报的数与恶魔数字相同就拉出去杀掉,然后继续报数,遇到恶魔数字就拉出去杀掉,直到剩下一个人,数学家表示,不管说道哪个恶魔数,自己都能安全的留下,如果自己每次能安全留下就证明自己是上帝派来拯救他的人,就得放了这些人,最后数学家成功了,拯救了一批人。//
比如:有四个人,恶魔数字为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;
则最后为的代码为
运行结果为
这是比较繁琐的代码,下一期将会写比较简洁的约瑟夫杀人游戏,谢谢!!!
这篇关于杀人游戏——约瑟夫环(不用链表)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!