线性表应用--Josephus问题的解法(Python 版)
线性表应用
--Josephus问题的解法(Python 版)
Josephus问题描述:假设有n个人围坐一圈,现在要求从第k个人开始报数,报到第m个数的人退出。然后从下一个人开始继续报数并按照相同的规则退出,直到所有人退出。要求按顺序输各出列人的编号。
基于数组概念解法
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("")基于顺序表的解法
利用列表的性质,弹出报数为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基于循环单链表的解法
#基于单循环链表的解法 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 版)的更多相关文章
- 线性表 (单链表、循环链表-python实现)
一.线性表 线性表的定义: 线性表是具有相同数据类型的有限数据的序列. 线性表的特点: 出了第一个元素外,每个元素有且仅有一个直接前驱,除最后一个元素外有且只有一个后继. 线性表是一种逻辑结构,表示元 ...
- 线性表的链式存储C语言版
#include <stdio.h> #include <malloc.h> #define N 10 typedef struct Node { int data; stru ...
- Python线性表——单链表
1. 线性表简介 线性表是一种线性结构,它是由零个或多个数据元素构成的有限序列.线性表的特征是在一个序列中,除了头尾元素,每个元素都有且只有一个直接前驱,有且只有一个直接后继,而序列头元素没有直接前驱 ...
- 数据结构之线性表(python版)
数据结构之线性表(python版) 单链表 1.1 定义表节点 # 定义表节点 class LNode(): def __init__(self,elem,next = None): self.el ...
- 线性表(python实现)
线性表 1 定义 线性表是由 \(n(n>=0)\)个数据元素(节点)\(a1.a2.a3.-.an\) 成的有限序列.该序列中的所有节点都具有相同的数据类型.其中,数据元素的个数 \(n\) ...
- python数据结构——线性表
线性表 线性表可以看作是一种线性结构(可以分为顺序线性结构,离散线性结构) 1. 线性表的种类: 顺序表 元素存储在一大块连续存储的地址中,首元素存入存储区的起始位置,其余元素顺序存放. (元素之间的 ...
- 3、顺序表、内存、类型、python中的list
1.内存.类型本质.连续存储 1.内存本质 2.C 语言实例-计算 int, float, double 和 char 字节大小 使用 sizeof 操作符计算int, float, double 和 ...
- 集合线性表--List之ArrayList
集合操作——线性表 List: add().remove().subList().list.toArray().array.asList(). List排序: Collections.sort(li ...
- 线性表源码分享(c++),包含顺序表、单链表、循环链表、双向链表
---恢复内容开始--- 我是一个c++和数据结构的初学者,本文主要是把清华大学出版社的数据结构(用面向对象方法与c++语言描述)(第2版)这本书中第二章线性表的源码抄下来,在学习的过程中有助于加深印 ...
随机推荐
- 【uoj122】 NOI2013—树的计数
http://uoj.ac/problem/122 (题目链接) 题意 给出一棵树的dfs序和bfs序,保证一定可以构成一棵树.问构成的树的期望深度. Solution 这是一个悲伤的故事,我YY的东 ...
- std::async
https://www.cnblogs.com/qicosmos/p/3534211.html https://bobjin.com/blog/c_cpp_docs/reference/en/cpp/ ...
- C - Ilya And The Tree Codeforces Round #430 (Div. 2)
http://codeforces.com/contest/842/problem/C 树 dp 一个数的质因数有限,用set存储,去重 #include <cstdio> #includ ...
- [收藏转载链接]Opencv部分
转载自-柳如风-http://www.cnblogs.com/rongfangliu/p/opencvlink.html [收藏夹整理]OpenCV部分 OpenCV中文论坛 OpenCV论坛 o ...
- img、列表和table标签
一.img图片 <body> <a href="https://www.fmtxt.com"> <img src="images/1.jpg ...
- SQL Server 2012安装图解
SQL Server 2012 Enterprise Edition安装图解... 第一部分:安装前的准备 1.疑问:一个PC上可以安装多个SQL Server数据库么 答案:可以的.每一个安装的时候 ...
- P1075 质因数分解
P1075 质因数分解 题目描述 已知正整数 n 是两个不同的质数的乘积,试求出两者中较大的那个质数. 输入输出格式 输入格式: 一个正整数 n . 输出格式: 一个正整数 p ,即较大的那个质数. ...
- C# list.ForEach用法
list.ForEach(delegate(T model) { ... });
- 最新的IDEA激活方式
IntelliJ IDEA2017.3 激活 转自:http://blog.csdn.net/zx110503/article/details/78734428 最新的IDEA激活方式 使用网上传统的 ...
- 转:Xcode 删除文件后编译出现的missing file的警告
进入“Missing File”对应的目录进行删除即可. 1.由于使用SVN导致的,可进行如下操作: # cd ~/iHost/Demo/sfsimonutility/SFSimonUtility/S ...