线性表应用

--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. 【算法】Tarjan大锦集

    Task1 Description 一位冷血的杀手潜入 Na-wiat,并假装成平民.警察希望能在 N 个人里面,查出谁是杀手. 警察能够对每一个人进行查证,假如查证的对象是平民,他会告诉警察,他认识 ...

  2. BZOJ 3357: [Usaco2004]等差数列

    3357: [Usaco2004]等差数列 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 338  Solved: 160[Submit][Statu ...

  3. Android Studio & eclipse 调试技巧

    如上图设置多个断点,开启调试.想跨断点移动到下一个断点,点击如下图1箭头,程序将运行一个断点到下一个断点之间需要执行的代码.如果后面代码没有断点,再次点击该按钮将会执行完程序.点击箭头2指向的按钮,可 ...

  4. [CQOI2016] 手机号码 (数位dp)

    link $solution:$ $10^{10} \leq L \leq R < 10^{11}$这个数据范围很容易想到数位$dp$. 依照题意模拟即可. #include<iostre ...

  5. 《剑指offer》— JavaScript(16)合并两个排序的链表

    合并两个排序的链表 题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. *** 思路 如果pHead1和pHead2中有一个为空,则result是另 ...

  6. RF - selenium - open browser

    *** Settings ***Library Selenium2Library *** Test Cases ***Open baidu with Chrome Open Browser http: ...

  7. print显示特定的数据格式

    原文网址 1.查看数据print  variable        查看变量print  *array@len      查看数组(array是数组指针,len是需要数据长度)可以通过添加参数来设置输 ...

  8. java程序文件读取与保存实例代码

    class RadioHere extends JFrame implements ActionListener { private JTextArea ta=new JTextArea(10,20) ...

  9. 执行composer install 报错的解决办法

    执行composer install后报以下错误: Loading composer repositories with package informationInstalling dependenc ...

  10. Kubernetes Downward API

    目录 说明 环境变量方式 将pod信息注入为环境变量 将容器资源信息注入为环境变量 volume挂载方式 作用 说明 我们知道,每个Pod在成功创建出来之后,都会被系统分配唯一的名字.IP地址,并且处 ...