Python 约瑟夫圈问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 约瑟夫圈问题相关的知识,希望对你有一定的参考价值。

  • 需求:有n个人围成一圈,顺序排号, 从第1个人开始报数(从1到3),凡报到3的人退出圈子,问最后留下的是原来第几号的那位
  • 代码逻辑
    • n个人,通过输入参数n,生成一个长度为n的列表
    • 通过报数逻辑函数,只要数到3的就把那个位置相对应的列表值设置为0,同时留下的人数也要减1,直到剩下的人数为1,才退出循环
    • 通过报数逻辑函数,最后得到新的列表(只有一个值是1,其余都是0),进行循环即可
  • 代码如下:
     1 #coding:utf-8
     2 #__author__ = ‘Diva‘
     3 # 用户输入n,n代表人数,围成一圈,顺序排号
     4 # 从第一个开始报数,1,2,3,数到3的人,退出圈子
     5 
     6 # 报数逻辑,数到3的把对应的位置置为0,直到剩下最后一个人
     7 def num_report(list_create):
     8     n = 0
     9     list_size = len(list_create)
    10     number_stay = list_size     # 剩下的人数(值为1的个数)
    11     while not number_stay == 1:
    12         for i in range(list_size):
    13             if list_create[i] == 1:
    14                 n = n + 1
    15                 if n == 3:
    16                     list_create[i] = 0
    17                     n = 0
    18                     number_stay = number_stay - 1
    19             if i == list_size:
    20                 i = 0
    21 
    22 # 通过报数函数最后生成的新的列表,遍历,找到唯一一个值不是0的人
    23 def remove_num_3(list_create):
    24     num_report(list_create)
    25     print(经过报数逻辑最后得到的列表是: + str(list_create))
    26     i = 0
    27     while i < len(list_create):
    28         if list_create[i] == 1:
    29             print(最后剩下的编号是: + str(i + 1))
    30             return True
    31         i = i + 1
    32 
    33 # 根据用户输入的人数n,生成列表,同时执行移除动作
    34 def list_create_rm(n):
    35     try:
    36         if not n.isdigit():
    37             return False
    38     except ValueError as e:
    39         pass
    40 
    41     nn = int(n)
    42     i = 0
    43     list_create = []
    44     while i < nn:
    45         list_create.append(1)
    46         i = i + 1
    47     print(生成的列表是: + str(list_create))
    48     remove_num_3(list_create)
    49 
    50 if __name__ == __main__:
    51     n = raw_input(请输入人数:)
    52     list_create_rm(n)

     

  • 测试结果
  • 技术分享

     

以上是关于Python 约瑟夫圈问题的主要内容,如果未能解决你的问题,请参考以下文章

使用循环链表实现约瑟夫环(围圈报数问题)

约瑟夫问题 -- python实现

python3约瑟夫环问题

约瑟夫环问题(100围坐一圈报数,报3出圈)

分别使用结构体和数组实现约瑟夫环(围圈报数问题之二)

一道约瑟夫算法题的简单设计