Today we will implement a Joseph Ring algorithm. Here is an interview question from Sina:
m monkeys sit in a circle, numbered from 1 to m clockwise. Then start counting from monkey No. 1 in a clockwise direction from 1, and the n monkey is out. Then count again from the next position of the monkey who just got out. Repeat this until there is only one monkey left, which is the king. Design and write a program to implement the following functions:
(1) The user is required to input the monkey number m at the beginning and the last number n reported.
(2) Give the initial number of the elected Monkey King.
This question is a typical Joseph Ring problem, the "monkey chooses the king" problem.
Note: This example passed the test under python2.7, but was not tested under python3. Interested students can communicate in the group
Go directly to the code:
#!/usr/bin/python # coding=utf-8 # 约瑟夫环算法 之 猴子选王 问题 def king(m,n): dd = {} #生成一个字典 p = 1 while(p<=m): dd[p] = p p = p+1 j = 1 while(len(dd) >1): for k,v in dd.items(): if(j == n): del dd[k] j = 1 else: j = j+1 return dd print king(6,2)
Note: A dictionary is used here, not a list. Mainly because this can take advantage of the index of the dictionary