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

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

n=int(input('输入数字:'))#输入数字
a=list(range(1,n+1))#建立一个列表,存放的是号码数
count=0;#构造一个全局变量,使得其储存每一位报的数
while len(a)>1:#循环直到列表只剩一个元素
	b=a[:]#复制列表,为下一步删除做准备
	for i in range(0,len(b)):#在len(b)的次数中,计数,并去除数
		count+=1
		if count%3==0:#如果报三,则去除a中的这一位
			a.remove(b[i])
print(a[0])		
		

代码二:def一个函数如下,实现以上功能

def who_remain(n): 
	lst = [i for i in range(1, n+1)]#构造一个列表
	while n > 2: 
		lst.pop(2)#弹出第三个元素
		before = lst[:2]#弹出后把前两个元素移到最后
		lst = lst[2:]
		lst.extend(before)
		n = len(lst)#下一次循环就从原来的4号(即现在的1号开始)
	print(lst[1])

你可能感兴趣的:(python编程练习)