当前位置: 首页 > news >正文

网站建设商务通什么意思网站做sem推广时要注意什么意思

网站建设商务通什么意思,网站做sem推广时要注意什么意思,优化电池充电是关闭还是打开好,网站建设课程总结一、导言 约瑟夫环(Josephus Problem)是一个经典的数学问题,涉及一个编号为 1 到 n 的人围成一圈,从第一个人开始报数,报到某个数字 m 的人出列,然后再从下一个人开始报数,如此循环&#xff0c…

一、导言

约瑟夫环(Josephus Problem)是一个经典的数学问题,涉及一个编号为 1 到 n 的人围成一圈,从第一个人开始报数,报到某个数字 m 的人出列,然后再从下一个人开始报数,如此循环,直到所有人都出列。本篇博客将详细解析约瑟夫环问题,并使用 Python 实现算法。

二、问题分析

在约瑟夫环问题中,有两个变量需要确定:人数 n 和报数的数字 m。当给定 n 和 m 后,需要确定最后留下的人的编号。例如,当 n=7,m=3 时,约瑟夫环问题的过程如下:

  • 1 2 3 4 5 6 7 (初始状态)
  • 1 2 4 5 6 7(第3个人出列,报数到3)
  • 1 2 4 5 7(第6个人出列,报数到3)
  • 1 4 5 7(第2个人出列,报数到3)
  • 1 4 5(第7个人出列,报数到3)
  • 1 4(第5个人出列,报数到3)
  • 4(第1个人出列,报数到3)

因此,最后留下的人的编号为 4。

三、解决方案

解决约瑟夫环问题的一种常见思路是使用循环链表。首先,我们可以创建一个循环链表,并将人的编号作为节点的值。然后,从第一个节点开始,依次报数,当报数到达 m 时,移除当前节点,继续下一个节点,直到只剩下一个节点为止。

下面是使用 Python 实现约瑟夫环问题的代码:

"""
定义单向链表节点类
"""
class Node:def __init__(self, value):# 节点的值self.value = value# 指向下一个节点self.next = Noneclass CircularLinkedList:def __init__(self):self.head = Nonedef append(self, value):"""append: 在链表末尾添加一个新节点,如果链表为空,则将头节点指向新节点,新节点的 next 指针指向头节点,否则遍历链表找到尾节点并将其 next 指向新节点,同时新节点的 next 指针指向头节点,以形成循环:param value::return:"""new_node = Node(value)if not self.head:self.head = new_nodeself.head.next = self.headelse:current = self.head# 循环找到最后一个节点while current.next != self.head:current = current.nextcurrent.next = new_nodenew_node.next = self.headdef remove(self, value):"""从链表中移除一个值为 value 的节点遍历链表找到要移除的节点,并将其前一个节点的 next 指针跳过该节点,实现移除操作。:param value::return:"""if not self.head:# 头节点为空执行# 如果链表为空,则结束方法returncurrent = self.headprev = Nonewhile True:if current.value == value:if current == self.head:temp = self.headwhile temp.next != self.head:temp = temp.nexttemp.next = self.head.nextself.head = self.head.nextelse:prev.next = current.nextbreakprev = currentcurrent = current.nextif current == self.head:breakdef get_survivor(self, m):"""根据约瑟夫环问题,找到最后留下的人的编号,其中参数 m 表示每次移除第 m 个人。使用循环遍历链表,每次移除第 m 个节点,直到只剩下一个节点为止,返回该节点的值。:param m::return:"""current = self.headwhile current.next != current:count = 1while count != m:current = current.nextcount += 1self.remove(current.value)current = current.nextreturn current.valuedef josephus(n, m):linked_list = CircularLinkedList()for i in range(1, n+1):linked_list.append(i)return linked_list.get_survivor(m)if __name__ == '__main__':n = 5m = 2survivor = josephus(n, m)print(f"The survivor's number is: {survivor}")

http://www.dtcms.com/a/513951.html

相关文章:

  • 买完域名后如何建设网站wordpress 客户端使用
  • 网站后台软件可以自己做吗全屋定制十大品牌排行榜前十名
  • phpcms网站建设做装修工程找什么网站接单
  • 高校门户网站建设本溪建设网站
  • 办公家具网站模板网站开发证书要求
  • 山东省建设厅招标网站首页网站开发的收入
  • 容桂网站制作咨询湛江h5建站
  • 深圳网站建设网网站建设 需求
  • 邢台seo网站制作如何跟进psd做网站
  • 网站专题报道页面怎么做的河南网站托管
  • 上海高端品牌网站建设专家优设网设计师导航
  • 如何免费申请网站白云网站建设公
  • 做网站必须有框架是吗品牌建设内涵
  • Prometheus 监控系统详解
  • 济南网站建设公司哪家好呼市做网站
  • 网站搭建和网站开发手机怎样建设网站
  • 郓城县网站建设抖音代运营公司经营范围
  • 手机建网站详细步骤百度seo推广方案
  • 做酒的网站网页链接怎么弄
  • 企业官方网站建设规划wordpress 在线点餐
  • 网站的网站建设wordpress写表格
  • 在线域名查询网站广州优化公司哪家好
  • 网站建设验收确认书无锡网站优化公司
  • 外贸网站优化在线推广地方网站有何作用
  • 北京云建站模板注册推广赚钱一个80元
  • WordPress外贸企业站主题动漫网站在线免费观看
  • 收费下载网站cms设计不错的网站
  • wordpress 进站插件开发者选项在哪里关闭
  • 学了lamp做网站就足够了吗湖北省建设规划网站
  • 担保网站建设保定网络营销网站