考点:
程序逻辑和调试,类似环形链表结构
题目:
有n个人围成一圈,顺序排号。
从第一个人开始报数(从1到3报数),
凡报到3的人退出圈子,
问最后留下的是原来第几号的那位。
假定有10个人手牵手绕成一圈,即n=10
程序效果:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
移除报到3的人后 [1, 2, 4, 5, 6, 7, 8, 9, 10]
移除报到3的人后 [1, 2, 4, 5, 7, 8, 9, 10]
移除报到3的人后 [1, 2, 4, 5, 7, 8, 10]
移除报到3的人后 [1, 4, 5, 7, 8, 10]
移除报到3的人后 [1, 4, 5, 8, 10]
移除报到3的人后 [4, 5, 8, 10]
移除报到3的人后 [4, 5, 10]
移除报到3的人后 [4, 10]
移除报到3的人后 [4]
编写思路:
1.可以先用小的数值进行测试,让人数少点,然后看数据变化。
2.这里因为是n个人绕成一圈,所以计数的时候count的值要能够从头到尾、从尾到头都能连续计数。所以要将count设置为全局变量。
3.可以直接通过一个索引变量从list1中读取每一个数据,值得注意的是读到最后一个数据后要重置索引为0,这样可以形成环形结构读取。
4.使用if。。。else。。。语句来区分list1的索引是否读取到列表的末尾一个。
5.需要用到循环一直不停读取,直到最后一个人。
源代码:
""" n=10 list1=[i for i in range(1,n+1)] print(list1) count=0 curindex=0 while len(list1)>1: #开始报数 count+=1 if count==3: count=0 del list1[curindex] curindex-=1 print("移除报到3的人后 ",list1) if curindex==len(list1)-1: curindex=0 else: curindex += 1 # print(list1)
总结部分:
这道题目考查的除了一个程序要的逻辑思维以外,还重点需要结合程序的调试,考查一个人的程序调试能力,是一个较为综合性的题目。