问题:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第 几号的那位。
解决思路: 我的解决思路是先给这n个人排序生成代表他们身份标记的列表,对列表进行循环迭代,找出每次列表中要退出圈子的人的标记,然后在列表中删除这些标记,直到列表长度为1,列表里只有一个人的标记时,这个标记就是最后留下来的人的标记。
代码实现:
#生成列表对象,给围成一圈的人做标记,从一开始
person=int(input("请输入围成一圈的人数:"))
list=[]
for i in range(1,person+1):
list.append(i)
pass
#生成符合条件的列表
def printInfo(listArr,count):
list1 = [] #生成列表
for i in listArr:#遍历列表
count += 1 #记录每个人数的数字
if count % 3 == 0: #每个人数的数为三时,执行下列代码
list1.append(i) #将数数为3的人记录到一个新的列表中
for i in list1: #遍历这个列表
listArr.remove(i) #将数数为3的人的标记删除
return listArr,count #返回列表中还剩下的人,最后一个人喊得数字
#迭代循环,找出最后一个人
def printOut(listArr,count):
list1,count1=printInfo(listArr,count) #调用方法,生成参数
if len(list1)==1: #迭代停止的条件
for i in list1:
print("最后留下来的人是编号为{0}的人".format(i)) #输出剩下的最后1人
pass
else: #如果剩下的人的标记>=2,则继续进行迭代循环
printOut(list1,count1)
pass
printOut(list,0) #调用方法