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


相关推荐

  • HTML5的Video标签的属性,方法和事件汇总

    HTML5的Video标签的属性,方法和事件汇总

    2021年9月21日
    63
  • 排序算法时间复杂度、空间复杂度、稳定性比较[通俗易懂]

    排序算法时间复杂度、空间复杂度、稳定性比较[通俗易懂]排序算法分类排序算法比较表格填空排序算法平均时间复杂度最坏时间复杂度空间复杂度是否稳定冒泡排序:————-::—–::—–::—–:选择排序:————-::—–::—–::—–:直接插入排序:————-::—–::—–::—–:归并排序:————-::—–::

    2022年5月15日
    47
  • DSP之CCS软件使用一「建议收藏」

    1、创建新的工程文件:选择菜单“Project”的“New…”项。2、在工程文件中添加程序文件:新增文件分别为*.c,.cmd,evmdm6437bsl.lib,.h文件。方法:(1)找到C盘下C:\CCStudio_v3.3\boards\ICETEK-DM6437-B_V2\test\Lab0101_UseCCS\UseCCS\UseCCS.C文件。(2)C:\CCStudio…

    2022年4月7日
    52
  • 计算机odbc数据源管理位置,ODBC数据源管理器的主要功能是什么 ODBC数据源怎么配置…

    计算机odbc数据源管理位置,ODBC数据源管理器的主要功能是什么 ODBC数据源怎么配置…简介 关于 ODBC 数据源管理器的主要功能是什么 ODBC 数据源怎么配置的相关装修疑问 相信很多朋友对此并不是非常清楚 为了帮助大家更好的了解相关装修知识要点 小编特此为大家整理出如下讲解内容 希望下面的装修内容对大家有所帮助 如果有更好的建议或者想看更多关于装修问答怎么样到底好不好 可以多多关注南充装修装饰网 每台计算机上都有 ODBC 数据源 我们可以通过它提供的 API 接口使用 ODBC 驱动程序 然后

    2026年3月18日
    2
  • electron入门教程

    electron入门教程一 安装配置 1 为你的应用创建一个新的空文件夹 Electron2 打开你的命令行工具 然后从该文件夹运行 npminit 会帮助你创建一个基本的 package json 文件 3 安装 electronnpmi develectron4 项目根目录新建 main js 文件 入口文件 const app BrowserWindo require electron functioncrea 创建浏览器

    2026年3月19日
    2
  • graph representation learning_with for什么意思

    graph representation learning_with for什么意思刷新三数据集纪录的跨镜追踪(行人再识别-ReID)技术云从科技在跨镜追踪(行人再识别)技术(ReID)上获取重大突破。同时在Market-1501,CUHK03,DukeMTMC-reID三个数据集刷新了世界纪录,其中最高在Market-1501上的首位命中率(Rank-1Accuracy)达到96.6%,让跨镜追踪(ReID)在准确率上首次达到商用水平,人工智能即将从「刷脸」跨到「识人」的新纪…

    2022年10月6日
    4

发表回复

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

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