python解决约瑟夫环问题(容易理解版)「建议收藏」

python解决约瑟夫环问题(容易理解版)「建议收藏」python解决约瑟夫环问题(容易理解版)约瑟夫环问题:已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到k的那个人被杀掉;他的下一个人又从1开始报数,数到k的那个人又被杀掉;依此规律重复下去,直到圆桌周围的人只剩最后一个。第一次写博客,请大家多多指教。超级容易理解版:思路:刚开始把所有的人放到一个列表里面去,报的数字不是3就把这个人放到列表的最后一…

大家好,又见面了,我是你们的朋友全栈君。

python解决约瑟夫环问题(容易理解版)

约瑟夫环问题:已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到k的那个人被杀掉;他的下一个人又从1开始报数,数到k的那个人又被杀掉;依此规律重复下去,直到圆桌周围的人只剩最后一个。

第一次写博客,请大家多多指教。

超级容易理解版:
思路:刚开始把所有的人放到一个列表里面去,报的数字不是3就把这个人放到列表的最后一个位置上面去,如果是3就把这个数字从列表中去掉。直到列表剩下一个人为止,代码如下:

def josephus(n,k):
    #n代表总人数,k代表报数的数字
    List = list(range(1,n+1))
    index = 0
    while List:
        temp = List.pop(0)
        index += 1
        if index == k:
            index = 0
            continue
        List.append(temp)
        if len(List)==1:
            print(List)
            break

if __name__ == '__main__':
    josephus(41,3)

—————————————————我是分割线——————————————————————

单向循环链表法(为了巩固链表的知识而去使用的方法)
思路:就是运用单向链表的循环,其实跟上面一种方法差不多,代码如下:

class Node(object):
    """结点"""
    def __init__(self,item):
        self.elem = item
        self.next = None

class SingleCycleLinkList(object):
    """单向循环链表"""
    def __init__(self):
        self.head = None

    def append(self,item):
        node = Node(item)
        if self.head is None:
            self.head = node
            node.next = node
        else:
            cur = self.head
            while cur.next != self.head:
                cur = cur.next
            cur.next = node
            node.next = self.head

    def travel(self):
        cur = self.head
        while cur.next != self.head:
            print(cur.elem, end=" ")
            cur = cur.next
        print(cur.elem)

    def remove(self,item):
        '''删除节点'''
        cur = self.head
        pre = None
        while cur.next != self.head:
            if cur.elem == item:
                #头节点的情况
                if cur == self.head:
                    rear = self.head
                    while rear.next != self.head:
                        rear = rear.next
                    rear.next = cur.next
                    self.head = cur.next
                else:
                    #中间结点的情况
                    pre.next = cur.next
                return
            else:
                pre = cur
                cur = cur.next
    #尾节点的情况和一个元素的情况
        if cur.elem == item:
                # 一个元素的情况
            if cur == self.head:
                self.head = None
                # 尾节点元素的情况
            else:
                pre.next = self.head
                # pre.next = cur.next

    def judgement(self):
        cur = self.head
        count = 1
        while cur != cur.next :
            cur = cur.next
            count += 1
            if count == 3:
                self.remove(cur.elem)
                print("%d-->"%cur.elem,end="")
                count = 0
        print(cur.elem)

if __name__ == '__main__':
    sll = SingleCycleLinkList()
    for i in range(1,42):
        sll.append(i)
    sll.judgement()

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/136000.html原文链接:https://javaforall.net

(0)
上一篇 2022年6月4日 上午11:16
下一篇 2022年6月4日 上午11:36


相关推荐

  • python分组聚合_python爬虫标签

    python分组聚合_python爬虫标签由于某些原因,回归和分类问题总会引起机器学习领域的大部分关注。多标签分类在数据科学中是一个比较令人头疼的问题。在这篇文章中,我将给你一个直观的解释,说明什么是多标签分类,以及如何解决这个问题。1.多标签分类是什么?让我们来看看下面的图片。如果我问你这幅图中有一栋房子,你会怎样回答?选项为“Yes”或“No”。或者这样问,所有的东西(或标签)与这幅图有什么关系?在这些类型的问题中,我们有一组目标变…

    2025年7月22日
    6
  • java getmethod类_Java getMethod类型参数

    java getmethod类_Java getMethod类型参数publicclassD publicstatic String args TODOAuto generatedmet newDynamicIn app sayHello 张三 2 try try app getClass getMethod

    2026年3月18日
    3
  • 使用 For 循环遍历 Python 字典的 3 种方法

    使用 For 循环遍历 Python 字典的 3 种方法在 Python 中 如何使用 for 循环遍历字典 今天我们将会演示三种方法 并学会遍历嵌套字典 在实战前 我们需要先创建一个模拟数据的字典 dict 1 Name Zara Age 7 Class First Address Beijing 方法 1 使用 For 循环 索引进行迭代在 Python 中遍历字典的最简单方法 是将其直接放入 for 循环中 Python 会自动将 dict 1 视为字典 并允许你迭代其 key 键 然后 我们就可以使用索引

    2026年3月26日
    2
  • 群、环、域的概念总结[通俗易懂]

    群、环、域的概念总结[通俗易懂]很容易看懂群简而言之,群的概念可以理解为:一个集合以及定义在这个集合上的二元运算,满足群的四条公理,封闭性、结合性、单位元、反元素。具体理解为:封闭性:在集合上作任意二元运算,不会诞生新的运算,这个集合已经经过充分的完美拓扑。结合性:组合一个二元操作链,之间没有先后运算的区别,这种操作是平坦的(区别交换律)。单位元:具有单位的属性,单位元和任何一个元素操作等于那个元素本身。…

    2022年6月18日
    61
  • taiko脚本录制

    taiko脚本录制taiko 他是一个 web 自动化的测试软件 简单使用 安装 node js 打开 node 官网 https nodejs org en 下载 14 把版本稳定版下载安装完成后 win R 输入 cmd 打开命令窗口输入 node v 提示版本号就表示安装成功安装 taiko 直接输入命令 npminstall gtaiko 就开始下载了 下载完成后在直接 taiko v 查看是否安装成功显示版本就说明已经下载安装完成了开始记录测试 录制脚本 taiko 启动浏览器 默

    2026年3月18日
    2
  • Double转换BigDecimal的精度问题

    Double转换BigDecimal的精度问题在使用一些高精度的计算的时候是需要注意的 当使用第一种方式的时候 ide 也会有提示你使用字符串转换

    2025年9月17日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号