线性表应用

--Josephus问题的解法(Python 版)

Josephus问题描述:假设有n个人围坐一圈,现在要求从第k个人开始报数,报到第m个数的人退出。然后从下一个人开始继续报数并按照相同的规则退出,直到所有人退出。要求按顺序输各出列人的编号。  

  1. 基于数组概念解法

    1. 建立一个包含n个人的表
    2. 找到第k个人,从那里开始
    3. 处理过程中采用吧相应元素修改为0的方式表示已经退出,反复做:
    4. 数m个(尚在坐的)人,遇到表的末端转回到下标0继续
    4. 把表示第m个人的表元素修改为0
    5. n个人出列表示结束

     def josephus(n,k,m):
    people = list(range(1,n+1)) # 初始化,序列标号 1,2,3,...,n
    i = k - 1 # i 记录了第k个人的下标
    for num in range(n): # 循环n次
    count = 0
    while count < m :
    if people[i] > 0: # 跳过 已经退出的人
    count += 1
    if count == m : # 这里注意: i还没+1
    print(people[i], end="")
    people[i] = 0
    i = (i + 1) % n # 控制 i 的循环
    if num < n + 1 :
    print(", ",end="")
    else :
    print("")
  2. 基于顺序表的解法 

    利用列表的性质,弹出报数为m的人

     # 利用列表的性质,弹出报数为m的人
    
     def josephus_L(n,k,m):
    people = list(range(1,n+1))
    num , i = n , k-1
    for num in range(n,0,-1):
    i = (i + m - 1) % num # 报数m的人的下标
    print(people.pop(i),end="") # 报数第m个数的人弹出后 i 自动指向下一个
    return
  3. 基于循环单链表的解法

     #基于单循环链表的解法
    
     class Josephus(LCList) :
    
         def turn(self,m):
    for i in range(m) :
    self._rear = self._rear.next # self._rear 指向尾节点 def __init__(self,n,k,m) :
    LCList.__init__(self) :
    for i in range(n) :
    self.append(i + 1)
    self.turn(k-1)
    while not self.is_empty() :
    self.turn(m-1) # 循环m次,self._rear 指向m,弹出 m+1
    print(self.pop(),end=("\n" if self.is_empty() else ", ")) Josephus(10,2,7) # 运行

    LCList 的定义请查看本人博客的文章: 数据结构之线性表

线性表应用--Josephus问题的解法(Python 版)的更多相关文章

  1. 线性表 (单链表、循环链表-python实现)

    一.线性表 线性表的定义: 线性表是具有相同数据类型的有限数据的序列. 线性表的特点: 出了第一个元素外,每个元素有且仅有一个直接前驱,除最后一个元素外有且只有一个后继. 线性表是一种逻辑结构,表示元 ...

  2. 线性表的链式存储C语言版

    #include <stdio.h> #include <malloc.h> #define N 10 typedef struct Node { int data; stru ...

  3. Python线性表——单链表

    1. 线性表简介 线性表是一种线性结构,它是由零个或多个数据元素构成的有限序列.线性表的特征是在一个序列中,除了头尾元素,每个元素都有且只有一个直接前驱,有且只有一个直接后继,而序列头元素没有直接前驱 ...

  4. 数据结构之线性表(python版)

    数据结构之线性表(python版) 单链表 1.1  定义表节点 # 定义表节点 class LNode(): def __init__(self,elem,next = None): self.el ...

  5. 线性表(python实现)

    线性表 1 定义 线性表是由 \(n(n>=0)\)个数据元素(节点)\(a1.a2.a3.-.an\) 成的有限序列.该序列中的所有节点都具有相同的数据类型.其中,数据元素的个数 \(n\) ...

  6. python数据结构——线性表

    线性表 线性表可以看作是一种线性结构(可以分为顺序线性结构,离散线性结构) 1. 线性表的种类: 顺序表 元素存储在一大块连续存储的地址中,首元素存入存储区的起始位置,其余元素顺序存放. (元素之间的 ...

  7. 3、顺序表、内存、类型、python中的list

    1.内存.类型本质.连续存储 1.内存本质 2.C 语言实例-计算 int, float, double 和 char 字节大小 使用 sizeof 操作符计算int, float, double 和 ...

  8. 集合线性表--List之ArrayList

    集合操作——线性表 List: add().remove().subList().list.toArray().array.asList(). List排序:  Collections.sort(li ...

  9. 线性表源码分享(c++),包含顺序表、单链表、循环链表、双向链表

    ---恢复内容开始--- 我是一个c++和数据结构的初学者,本文主要是把清华大学出版社的数据结构(用面向对象方法与c++语言描述)(第2版)这本书中第二章线性表的源码抄下来,在学习的过程中有助于加深印 ...

随机推荐

  1. Luogu 2801 教主的魔法 | 分块模板题

    Luogu 2801 教主的魔法 | 分块模板题 我犯的错误: 有一处l打成了1,还看不出来-- 缩小块大小De完bug后忘了把块大小改回去就提交--还以为自己一定能A了-- #include < ...

  2. 洛谷 P3197 [HNOI2008]越狱 解题报告

    P3197 [HNOI2008]越狱 题目描述 监狱有连续编号为\(1-N\)的\(N\)个房间,每个房间关押一个犯人,有\(M\)种宗教,每个犯人可能信仰其中一种.如果相邻房间的犯人的宗教相同,就可 ...

  3. 【bzoj3575】 Hnoi2014—道路堵塞

    http://www.lydsy.com/JudgeOnline/problem.php?id=3575 (题目链接) 题意 给出一个有向图和一条最短路,问最短路上任意一条边断掉,此时的最短路是多少. ...

  4. [网络流]小M的作物

    小\(M\)的作物(最小割) 做的第一道网络流,因为一个智障错误调了好久嘤嘤嘤 题目描述 小\(M\)在\(MC\)里开辟了两块巨大的耕地\(A\)和\(B\)(你可以认为容量是无穷),现在,小\(P ...

  5. linux命令总结之ip命令

    Linux的ip命令和ifconfig类似,但前者功能更强大,并旨在取代后者.使用ip命令,只需一个命令,你就能很轻松地执行一些网络管理任务.ifconfig是net-tools中已被废弃使用的一个命 ...

  6. 我的编码习惯 - Controller规范

    原文出处: 晓风轻 请先阅读我这2篇文章 程序员你为什么这么累? 和 我的编码习惯 - 接口定义. 第一篇文章中,我贴了2段代码,第一个是原生态的,第2段是我指定了接口定义规范,使用AOP技术之后最终 ...

  7. aspx <%= %> 绑定变量问题及解决方法

    aspx页面,前台页面需要用到后台变量字段的时候我们一般使用  <%= 变量  %>,多数情况下使用正常. 但是有的时候就会遇到变量解析被编码的情况,特别是是在head当中css引用lin ...

  8. ORM choice字段 如何在页面上显示值

    核心:obj.get_字段名_display 1.定义module 数据结构: class msg(models.Model): choice = ( (1, '技术部'), (2, '行政'), ( ...

  9. bzoj千题计划117:bzoj1026: [SCOI2009]windy数

    http://www.lydsy.com/JudgeOnline/problem.php?id=1026 数位DP 如果前一位填的是0, 0是前导0,下一位可以随便填 0不是前导0,下一位不能填1 为 ...

  10. RTSP服务器之————rtsp-server(轻量级RTSP / RTP流媒体服务器)

    github:https://github.com/revmischa/rtsp-server 轻量级RTSP / RTP流媒体服务器