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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • jvm定义的类加载器_类加载器有哪些

    jvm定义的类加载器_类加载器有哪些0.为什么需要自定义类加载器网上的大部分自定义类加载器文章,几乎都是贴一段实现代码,然后分析一两句自定义ClassLoader的原理。但是我觉得首先得把为什么需要自定义加载器这个问题搞清楚,因为如果不明白它的作用的情况下,还要去学习它显然是很让人困惑的。首先介绍自定义类的应用场景:(1)加密:Java代码可以轻易的被反编译,如果你需要把自己的代码进行加密以防止反编译,可以先…

    2025年9月23日
    7
  • 自动化运维架构(开发)

    自动化运维架构(开发)一、DevOps定义1.DevOps是“开发”和“运维”的缩写。2.DevOps是一组最佳实践强调(IT研发、运维、测试)在应用和服务生命周期中的协作和沟通3.强调整个组织的合作以及交付和基础设施变更自动化,从而实现持续集成、持续部署和持续交付二、DevOps持续交付环1.我们把开发交付划分为:计划–>编码–>构建–>测试–>…

    2022年7月17日
    20
  • JavaScript Scripting.FileSystemObject FSO属性大全

    JavaScript Scripting.FileSystemObject FSO属性大全
    什么是FSO?
    FSO即FileSystemObject文件系统对象,是一种列表Windows磁盘目录和文件,对目录和文件进行删除、新建、复制、剪切、移动等操作的技术。使用FSO网站的好处:直接读取目录下的文件和子目录,方便维护,如需要添加任何内容,将文件放在相应的目录下即可;FSO网站类似Windows操作界面,易于使用,会使用Windows就会使用FSO网站。
    试想一下,很方便的就可以将您硬盘中的文件和文件夹制作成网站,并且日后只要把内

    2022年7月14日
    15
  • 给VS2010安装 visual assistant X 1819

    当前最新版本visualassistantX(forVS2010)的安装文件和方法,我已上传至:http://download.csdn.net/source/2274032

    2022年4月12日
    40
  • 本工作站与主域失去信任_电脑域改为工作组后无法登录

    本工作站与主域失去信任_电脑域改为工作组后无法登录Windows7系统在WindowsServer2003中的加域问题,加域时提示:此工作站和主域间的信任关系失败。故障原因:故障原因:这个问题是由于登陆windowsserver2003的域控制器(DC)的网络服务是服务器无法辨识其DS_WEB_SERVICE_REQUIRED值引起的。简单点儿来说,就是服务器不认windows7.了解计算机七层协议的人都知…

    2022年10月18日
    3
  • 瑞利熵与香农熵_熵 信息

    瑞利熵与香农熵_熵 信息在信息论中,Rényi熵是Hartley熵,Shannon熵,碰撞熵和最小熵的推广。熵能量化了系统的多样性,不确定性或随机性。Rényi熵以AlfrédRény

    2022年8月3日
    8

发表回复

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

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