版权声明:本文为博主原创文章未经博主允许不得转载。 /u/article/details/
17个猴子选大王c语言围成一圈从某个开始报数1-2-3-1-2-3-……报“3”的猴子选大王c语言就被淘汰,游戏一直进行到圈内只剩一只猴子选大王c语言它就是猴大王了
小技巧:用数组来记录猴子选大王c语言是否在圈内的状态:在圈内记为“1”,不在圈内记为“0”并以累加数组元素值来模拟报数过程,这样就减少了判断猴子选大王c语言是否在圈内的操作
方法一的缺点是每次都要扫描包括已出圈嘚所有猴子选大王c语言,时间效率比较低而如果用数组元素来存储其下一只在圈内猴子选大王c语言的下标,就能方便地找到下一只在圈內猴子选大王c语言当一个猴子选大王c语言的下一只猴子选大王c语言就是自己时,圈内就只剩一只猴子选大王c语言它就是候大王了。
在n(0、1、2、3、……、n-1)只猴子选大王c语言中,假定报数m的猴子选大王c语言被删除则第一只被删除的猴子选大王c语言编号为(m-1)%n,记为k,那么删除k之后剩下的n-1只猴子选大王c语言为0、1、……、k-1、k+1、……、n-1,并且下一次是从k+1开始计数相当于在剩下的序列种,k+1排在最前面从而形成k+1、……、n-1、0、1、……、k-1。接下来将剩下的这n-1个数字的序列k+1、……、n-1、0、1、……、k-1映射形成一个从0到n-2的序列0、1、2、……、n-2把映射定义为p,则p(x)=(x-k-1)%n逆过来0、1、2、……、n-2映射为k+1、……、n-1、0、1、……、k-1,时则p’(x)=(x+k+1)%n而k=(m-1)%n,故p’(x)=(x+m)%n。最后一只猴子选大王c语言的编号为0故x=0,n=1。例如当m=3时p’(0)=(0+3)%1=3,表示最后一呮猴大王在倒数第二轮(编号也是从0开始)中编号为3。