猴王算法精简版 Python实现

来源:互联网 发布:塔吊考试模拟考试软件 编辑:程序博客网 时间:2024/05/01 19:43

一个猴王算法,网上所列太过繁琐,问题很简单描述如下,

猴王算法:一群猴子围成一圈,从某一只开始数,数到m只剔除之,

                        后面的接着从一开始数,数到m剔除之,依次类推,剩下的最后一只为猴王

因为刚学习了Python,所以用她来编码,很优秀的编程语言哦

 

#!/usr/bin/python

# _*_ coding:UTF-8 _*_

# FileName: monkey.py

'''

Created on 2010-9-22

 

@author: wpjiyan Email:wpjiyan@163.com

'''

def getKingMonkey(mlist,m,index=1,debug=False):

    '''返回数组mlist中从第index项开始数的去除第m只的猴王算法

 

    mlist:猴子群组

    m    :去除第m只猴子

    index:从第几只开始数

 

    用要去除的第m只数和猴子数取模,加上要隔过的猴子数index,这样如果是从

    第index只开始数应该去除的就第mn只猴子,

    去除猴子后,这时mn如果比猴子数还大则说明下次要从第一只开始数,

    '''

    mn = m % len(mlist)

    mn = mn + index -1

    if mn > len(mlist):

        mn = mn-len(mlist)

    if mn == 0:

        mn = len(mlist)

    mlist.remove(mlist[mn-1])

    if debug:

        print '%s  %d  %d  %d' %(mlist,m,index,mn)

    if len(mlist) == 1:

        return mlist[0]

    if mn > len(mlist):

        mn=1

    return getKingMonkey(mlist,m,mn,debug)

 

if __name__ == '__main__':    

    abc = [1,2,3,4,5]

    i = 5

    while i < 11:

        i += 1

        monkey_king = getKingMonkey(abc,i)

        abc = [1,2,3,4,5]

        print '在%s里去除第%d只的猴王是%s' %(abc,i,monkey_king)

 

输出如下:

 

在[1, 2, 3, 4, 5]里去除第6只的猴王是4

在[1, 2, 3, 4, 5]里去除第7只的猴王是4

在[1, 2, 3, 4, 5]里去除第8只的猴王是1

在[1, 2, 3, 4, 5]里去除第9只的猴王是2

在[1, 2, 3, 4, 5]里去除第10只的猴王是4

在[1, 2, 3, 4, 5]里去除第11只的猴王是5

 

 

原创粉丝点击