乙個猴王演算法,網上所列太過繁瑣,問題很簡單描述如下,
猴王演算法:一群猴子圍成一圈,從某乙隻開始數,數到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 檢測是否有資料來...