杀人游戏----约瑟夫环(不用链表优化版)

时间优化版杀人游戏----约瑟夫环


关于代码的一些基础都在上一个文章中参考:查看上一篇文章请点击我

首先得创建一个数组,此次数组的任何一个元素的值都是下一个要报数的人的数组下标,如图所示:
杀人游戏----约瑟夫环(不用链表优化版)其数组元素的初始化代码如下:

for(int i=0; i < count-1; i++) {
	array[index]=index+1;
}

若当前是index,则其下一个要报数人的下标是:array[index]。即可得出index=array[index]
定义两个元素 pre (前一个)和 cur(当前)
//初始时候cur下标为0,pre下标为人数减一

  1. 移动cur和pre到下一个元素:pre=cur; cur=array[cur];
  2. 删除一个元素:pre=array[cur];

根据上面的我们可以得出:

  1. 在没有人被杀的时候就只有移动即:pre=cur; cur=array[cur];
  2. 在有人被杀的时候就需要在有人被杀的时候就需要删除元素以及移动即:array[pre]=array[cur]; cur=array[cur];

总体代码如下:杀人游戏----约瑟夫环(不用链表优化版)

杀人游戏----约瑟夫环(不用链表优化版)

虽说没有用链表的方法,但是思想还是差不多一致的。。。