猴王演算法精簡版 Python實現

2021-09-30 07:32:31 字數 1455 閱讀 2136

乙個猴王演算法,網上所列太過繁瑣,問題很簡單描述如下,

猴王演算法:一群猴子圍成一圈,從某乙隻開始數,數到m只剔除之,

後面的接著從一開始數,數到m剔除之,依次類推,剩下的最後乙隻為猴王

因為剛學習了python,所以用她來編碼,很優秀的程式語言哦

#!/usr/bin/python

# _*_ coding:utf-8 _*_

# filename: monkey.py

created on 2010-9-22

@author: wpjiyan email:[email protected]

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

python 遺傳演算法精簡版

精簡版遺傳演算法,演算法中僅採用變異運算元而沒有使用交叉運算元,但是進化依然很有效 精簡版遺傳演算法,演算法中僅採用變異運算元而沒有使用交叉運算元,但是進化依然很有效 target list welcome to charset ascii lowercase parent choice chars...

KMP演算法自己整理(精簡版)

int violentmatch char s,char p else 匹配成功,返回模式串p在文字串s中的位置,否則返回 1 if j plen return i j 當前位置不要 1 else return 1 knuth morris pratt 字串查詢演算法,簡稱為 kmp演算法 常用於在...

verilog簡單實現串列埠(精簡版)

uart 2017.10.9 傳送接收到的資料 波特率9600 8個資料位 乙個停止位 無奇偶校驗 module uart clk,50mhz rst n,reset rx,input tx ouptut input clk,rst n input rx output reg tx 檢測是否有資料來...