约瑟夫环是什么?
有N个人围成一圈,从1开始报数,报到M的会被杀掉。杀掉之后,下一个继续从1开始报数,谁报到M,就会被杀掉。以往下去,获得最终的胜利者。以5个人为例,报到3的人会被淘汰,然后获得最终的胜利者。
方法一:用数组实现
第一步:创建数组,为数组申请空间并赋值。
第二步:需要设置几个变量
- num:最初游戏总人数
- i:数组下标
- total:当前报数,当total==3 ,就会有人被淘汰。
- left:当前剩余人数。
- last: 最终的胜利者
第三步:整体思路
- 只要队伍里有两个人及以上,这个游戏就得继续,所以循环条件就是 while(left >1)。
- 当total==3,我们把对应的数组值设置为0。也就是说,我们在循环时,只有值非零时,total加1。然后再判断total是否为3,当total==3,输出此时的值,并将该值改为0,total从1开始计数,剩余人数减1。继续利用数组下标递增循环,当i==num,数组下标超出范围,此时可以用i%=num来处理。
- 最后,我们对数组进行遍历,值不为0,就是最终的胜利者。
方法一数组实现代码