#coding=utf-8
import numpy as np
# 环形的n个值(0~n1),一直减去第m个数,求最后剩下的数
def last_reaining_number(n, m):
s = [x for x in range(n)] # 产生等差数列
p = m - 1
while len(s) != 1:
# 这里用while而不是if 因为处理一次后的p可能仍>len(s)-1. 所以必须处理到p值满足list的index条件为止
while p > len(s) - 1: # 超过了尾数的index
# 这个条件要放在最前面,为了防止p一上来就设置的大于len(s)-1, 如last_reaining_number(5, 8)
p = p - (len(s) - 1) - 1 # -1 减1 是因为index从0计数..
popnum = s.pop(p)
print popnum, p
p += (m - 1)
return s
res = last_reaining_number(5, 4)
# res = last_reaining_number(5, 8)
print res
如有错误欢迎指正。。感谢~