数据结构老师给我们留了约瑟夫环问题,结合我刚刚学完python想利用python中的列表切片来实现一个环形列表。下面不多BB直接上代码。
1 n=int(input("输入n:")) #首先输入两个数m,n 2 m=int(input("输入m:")) 3 ls=[] #定义一个空列表 4 for x in range(1,n+1): #将 为输入 的 n 从1开始加到空列表中 5 ls.append(x) 6 length=n #先给length 赋值 n 7 if m!=1: 8 while length>m: #当 满足while循环时 9 for i in range(1,length+1): 10 if i == m: 11 a=ls[i:] #通过两次列表切片巧妙地将复合条件的数字剔除 12 b=ls[:i-1] #注意是从 1开始的 不是 0开始的 所以列表索引减一 13 for j in b: #将切片得到的两个列表合并 将靠前的切片贴到后面巧妙形成 一个 循环 14 a.append(j) 15 length=len(a) #重新给length赋值 是新的到的列表a 16 ls=a #将列表a 赋值给 ls 17 break 18 continue 19 if length == m: #如果最后的length = m 则删除索引为m-1的列表元素 20 del(ls[m-1]) 21 length=len(ls) 22 #下面对于m<n的情况 23 while (length < m): 24 if length != 1: 25 cnt = m%length #巧妙求余运算使剩下编号形成一个环 26 if cnt>1: #对余数三种情况讨论 27 a=ls[cnt:] 28 b=ls[:cnt-1] 29 for j in b: 30 a.append(j) 31 length = len(a) 32 ls=a 33 elif cnt==1: 34 del(ls[cnt-1]) 35 length=len(ls) 36 continue 37 elif cnt==0: 38 del(ls[length-1]) 39 length=len(ls) 40 continue 41 else: 42 break 43 print(ls[0]) 44 else: 45 print(n)
好吧后面注释同上。。。
为了验证代码可靠性,我做了几组实验:
以上就是小白的分享,如果有什么意见欢迎大佬们给我留言~~
原文:https://www.cnblogs.com/Pigsss/p/12902506.html