猴子選大王問題(Monkey King)


  猴子選大王問題: 一堆猴子都有編號,編號是1,2,3 ...m ,這群猴子(m個)按照1到m的順序圍坐一圈,

  從第1開始數,每數到第n個,該猴子就要離開此圈,這樣依次下來,直到圈中只剩下最后一只猴子,則該猴子為大王。

  經典算法(C#版本)

1         public int King(int M, int N)
2         {
3             //總猴數 M ,數到第 N 個排除。 
4             int k = 0;
5             for (int i = 2; i <= M; i++)
6                 k = (k + N) % i;
7             return ++k;
8         }  
 經典算法(python版本py 2.7)
1 def king(m,n):
2     l,i=range(m),0    #構造list代表猴子,i記錄點名的次數,沒點名時候記0
3     while len(l)>1:    #當猴子數目大於一個時候
4         k=l.pop(0)      #點到名字的猴子出列
5         i+=1              #點名次數+1      
6         if i%n!=0:      #不是n*x次被點名的猴子站到隊伍末尾,等待再次被點名
7             l.append(k)
8     return l[0]+1      #返回猴子的編號 list index默認0開始
 monkeyking特例時候的(python版本 py 2.7)
1 #5只猴一圈,點到第3個時候出圈
2 l=range(5)
3 while (len(l)>1):
4     l.append(l.pop(0))
5     l.append(l.pop(0))
6     l.pop(0)
7 print l[0]+1

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM