题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
1 # -*- coding:utf-8 -*-
2
3 if __name__ =='__main__':
4 nmax=50
5 n = input('请输入总人数:')
6 num=[]
7 for i in range(n):
8 num.append(i+1)
9
10 j = 0#用于列表的下标
11 k = 0#统计是否为3
12 m = 0#用于循环记数,数三个数字记一次
13
14 while m<n-1:
15 if num[j]!=0:
16 k+=1
17 if k==3:#数到3则变0,并且将k初始化,重新计数
18 num[j]=0
19 k = 0
20 m+=1
21 j+=1
22 if j ==n: #m是数三次记一次,但是j数一次就+1,j将超出列表循环,所以要置0从头开始
23 j = 0 #(j==n也刚好在列表末尾)
24
25 #将最后剩下的数字输出
26 n=0
27 while num[n]==0:
28 n+=1
29 if num[n]!=0:
30 print num[n]
31 print '剩下的是原来的第%d位'%(n+1)
结果为:
请输入总人数:3
2
剩下的是原来的第2位
请输入总人数:10
4
剩下的是原来的第4位
备注:本题目的重点在于m与j之间的关系(m是循环三次加一,而j则是循环一次就加一)