有这样一道趣味编程题:n个人围成一圈,顺序排号。从第一个人开始报数(从 1到3报数),凡报到3的人退出圈子,问最后留下的是原来的几号?
常规解题思路,是定义数组,设置是否退出的标志,然后不断循环,最终得出结果。编程中需要考虑队列长度,起始位置标记等等,复杂度较高。
利用Python的列表功能可以很轻易的解决这一问题,编程思路也比较简洁易懂。思路如下:直接生成从1到n的列表,代表1号至n号。然后模拟转圈过程:将第一个挪到最后一个,再将下一个挪到最后一个,再将下一个剔除。再从第一个开始挪到最后,一直循环,直到剩一个人就是答案。
n=int(input("有几个人围圈坐?"))
a=list(range(1,n+1))
while len(a)>=3:
a.append(a.pop(0))
a.append(a.pop(0))
a.pop(0)
a.pop(0)
print("一共",n,"个人围圈坐,最后剩下的是",a[0],"号。")
在编程过程中,只需要关注列表中第一个数据就行。