zoukankan      html  css  js  c++  java
  • 约瑟夫环问题(python3.x)

    数据结构老师给我们留了约瑟夫环问题,结合我刚刚学完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)

    好吧后面注释同上。。。

    为了验证代码可靠性,我做了几组实验:

    以上就是小白的分享,如果有什么意见欢迎大佬们给我留言~~

  • 相关阅读:
    Web.xml配置详解
    ANNOTATION 注解
    Gradle的使用
    Version Control
    Building Tool(Maven/Gradle)
    HTTP协议
    函数式编程
    injection
    Container
    Building Tool(Maven/Gradle)
  • 原文地址:https://www.cnblogs.com/Pigsss/p/12902506.html
Copyright © 2011-2022 走看看