有n 个人围成一圈,顺序排号。从第一个人开始报数(从1 到3 报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位

时间:2025-04-15 13:05:34
# 有n 个人围成一圈,顺序排号。 # 从第一个人开始报数(从1 到3 报数),凡报到3的人退出圈子, # 问最后留下的是原来第几号的那位。 # 解析: # 先创建一个有n个元素的列表,元素是1——n # 循环列表,剔除循环到三的元素, # 当列表只剩一个元素时输出这个元素 def function(people): circle_people = [] # 先创建一个有n个元素的列表,元素是1——n: # 使用生成列表: circle_people = [m for m in range(1, people + 1)] # 使用生成器(刚学完生成器,单纯想要试一下): # 第一种方法: # g = (i for i in range(1, people + 1)) # for i in g: # circle_people.append(i) # # # # 第二种方法(使用函数): # def generator(): # for i in range(1, people + 1): # yield i # # # for i in generator(): # circle_people.append(i) ############################################# # 循环列表,剔除循环到三的元素, count, k, tem = 1, 0, 0 while len(circle_people) > 1: tem = k if circle_people[tem] == circle_people[-1]: k = 0 if tem == 0: if count == 3: del circle_people[tem] count = 1 else: count, k = count + 1, k + 1 elif circle_people[tem] == circle_people[-1]: if count == 3: del circle_people[tem] count = 1 else: count += 1 else: if count == 3: del circle_people[tem] count = 1 else: count, k = count + 1, k + 1 return circle_people[0] # 当列表只剩一个元素时输出这个元素,这个元素就是最后剩的人的编号: for i in range(1, 30): print('{}个人,最终剩下{}号'.format(i, str(function(i))))