python约瑟夫生死小游戏的实现
问题描述
30 个人在一条船上,超载,需要 15 人下船。
于是人们排成一队,排队的位置即为他们的编号。
报数,从 1 开始,数到 9 的人下船。
如此循环,直到船上仅剩 15 人为止,问都有哪些编号的人下船了呢?
算法思路
- 用环形链表去构造数据结构
- 每逢9的倍数,将该链表删除,指针指向下一个数字
核心代码
# 首先构造环形链表,这个很基本不多说
# 删除链表操作
while remain_people != 15:for ii in range(1,8): # 前7次运动是没有任何问题的ptr = ptr.nextelse: # 第8次运动,需要跳过第9个数,并将其删除# 打印9号链表print(ptr,'{}号下船了'.format(ptr.next.name))# 删除9号链表(同时跳过这个数)ptr.next = ptr.next.nextremain_people -= 1# 指针向前运动一次ptr = ptr.next
完整代码实现
'''
30 个人在一条船上,超载,需要 15 人下船。
于是人们排成一队,排队的位置即为他们的编号。
报数,从 1 开始,数到 9 的人下船。
如此循环,直到船上仅剩 15 人为止,问都有哪些编号的人下船了呢?思路:用环形链表去做
'''
# 1 定义一个类
class people:def __init__(self):self.name = ' 'self.next = None# 初始化第一个链表
head = people()
head.name = '1'
ptr = head# 2, 对30个人进行初始化,用字符串进行初始化
for ii in range(2,31):new_people = people()new_people.name = str(ii)ptr.next = new_peopleptr = ptr.next# 形成环形链表
ptr.next = head# 测试环形链表,测试通过
debug = 0
if debug:ptr = headwhile True:print(ptr,ptr.name)ptr = ptr.nextif ptr == head:breakelse:pass
else:pass# 3, 开始遍历,用while remain_people !=15 来判断
# 嵌套1个循环,用for循环,每逢9,删除一个链表,并打印出来
remain_people = 30
ptr = head
while remain_people != 15:for ii in range(1,8):ptr = ptr.nextelse:# 打印9号链表print(ptr,'{}号下船了'.format(ptr.next.name))# 删除9号链表ptr.next = ptr.next.nextremain_people -= 1# 指针向前运动一次ptr = ptr.next
运行效果
<__main__.people object at 0x01A00AB0> 9号下船了
<__main__.people object at 0x01A00CF0> 18号下船了
<__main__.people object at 0x01A00F30> 27号下船了
<__main__.people object at 0x01A009F0> 6号下船了
<__main__.people object at 0x01A00C70> 16号下船了
<__main__.people object at 0x01A00EF0> 26号下船了
<__main__.people object at 0x01A009F0> 7号下船了
<__main__.people object at 0x01A00CF0> 19号下船了
<__main__.people object at 0x01A00FF0> 30号下船了
<__main__.people object at 0x01A00B70> 12号下船了
<__main__.people object at 0x01A00E70> 24号下船了
<__main__.people object at 0x01A009F0> 8号下船了
<__main__.people object at 0x01A00DF0> 22号下船了
<__main__.people object at 0x01A009B0> 5号下船了
<__main__.people object at 0x01A00DF0> 23号下船了Process finished with exit code 0
小结
这个代码是一次性写成功的,没有出任何bug,说明非常高效,思考了一下原因如下:
- 在写代码之前,一定要在草稿纸上画一遍,观察数据特点,以及数据变化过程,然后再设计数据结构和算法。
- 进入编译器,把题目抄上去注释用三引号注释,接着开始写代码思路123,具体功能,怎么循环,怎么判断等等,然后用#注释掉
- 接着在注释掉的地方开始写代码框架,如循环,判断框架。写好之后再去完善变量,定义。
- 写到一半的时候,就要写一个测试代码,用
if debug
来控制是否启用,便于提前找出问题,并加深理解程序。
python约瑟夫生死小游戏的实现相关推荐
- python手机版做小游戏代码大全-python简单小游戏代码 怎么用Python制作简单小游戏...
1.Python猜拳小游戏代码: 2.import random #导入随机模块 3. 4.num = 1 5.yin_num = 0 6.shu_num = 0 7.while num <= ...
- python写游戏脚本-使用Python写一个小游戏
引言 最近python语言大火,除了在科学计算领域python有用武之地之外,在游戏.后台等方面,python也大放异彩,本篇博文将按照正规的项目开发流程,手把手教大家写个python小游戏,来感受下 ...
- python编程小游戏-使用Python写一个小游戏
引言 最近python语言大火,除了在科学计算领域python有用武之地之外,在游戏.后台等方面,python也大放异彩,本篇博文将按照正规的项目开发流程,手把手教大家写个python小游戏,来感受下 ...
- python小游戏代码大全-python简单小游戏代码 怎么用Python制作简单小游戏
1.Python猜拳小游戏代码: 2.import random #导入随机模块 3. 4.num = 1 5.yin_num = 0 6.shu_num = 0 7.while num <= ...
- python设计拼图小游戏_教你用Python自制拼图小游戏,轻松搞定熊孩子
摘要:本文主要为大家详细介绍了python实现拼图小游戏,文中还有示例代码介绍,感兴趣的小伙伴们可以参考一下. 开发工具 Python版本:3.6.4 相关模块: pygame模块: 以及一些Pyth ...
- 教你用Python自制拼图小游戏,轻松搞定熊孩子
摘要:本文主要为大家详细介绍了python实现拼图小游戏,文中还有示例代码介绍,感兴趣的小伙伴们可以参考一下. 开发工具 Python版本:3.6.4 相关模块: pygame模块: 以及一些Pyth ...
- 使用python制作聊天框解谜游戏_使用Python写一个小游戏alien invasion!
最近python语言大火,除了在科学计算领域python有用武之地之外,在游戏.后台等方面,python也大放异彩,本篇博文将按照正规的项目开发流程,手把手教大家写个python小游戏,来感受下其中的 ...
- python拼图游戏编码_教你用Python自制拼图小游戏,轻松搞定熊孩子
摘要:本文主要为大家详细介绍了python实现拼图小游戏,文中还有示例代码介绍,感兴趣的小伙伴们可以参考一下. 开发工具 Python版本:3.6.4 相关模块: pygame模块: 以及一些Pyth ...
- Python学习—2048小游戏等4个小练习
Python学习-2048小游戏等4个小练习 转载于:https://www.cnblogs.com/ChangAn223/p/10627777.html
最新文章
- Java项目:网上图书商城系统(java+SSM+Jsp+MySQL+Redis+JWT+Shiro+RabbitMQ+EasyUI)
- 【Android 逆向】Linux 文件权限 ( Linux 权限简介 | 系统权限 | 用户权限 | 匿名用户权限 | 读 | 写 | 执行 | 更改组 | 更改用户 | 粘滞 )
- C++ STL究竟有多慢?
- 数据集成之主数据管理(转载整理)
- left join on and 与 left join on where的区别
- WPF(Windows Presentation Foundation)Overview
- webpack 保存文件后自动打包_继webpack后又一打包神器Parcel
- curd日志记录php,ThinkPHP学习之CURD操作(一)
- 怎么提高wifi速度?
- [c++]常对象的特点
- [UWP]创建一个ProgressControl
- 《Redis开发与运维》----- 客户端
- 014-JVM-查看class文件的工具Binary viewer、ue、classlib Bytecode viewer
- 【傻瓜教程】手把手教你安装pip
- HS6 USB数据采集卡、USB高速数据采集卡,高级触发功能图解
- 华为公司是如何做绩效考核的
- GOF23设计模式之建造者模式
- 组装台式机后进入PE,检测不到硬盘的解决方法
- 根据视频URL解析视频信息(本地|网络)
- 基于jsp+java+ssm妇女联合会管理系统-计算机毕业设计
热门文章
- STM32工作笔记0013---认识UCOS系统
- java面试准备之---Struts2体系知识点,系统复习,struts2原理,ognl,el支持.---随时更新
- python编程(再述rpc)
- win32开发(按键消息)
- 搜索引擎的那些事(开篇)
- catia文本时怎么换行_【二次开发】CATIA二维图 环形文字工具
- 基于51单片机的密码锁
- java jolt tuxedo_Java通过Jolt调用Tuxedo服务
- python绘制turtle心电图代码_python的生态系统是由标准库和第三方库组成的,turtle库是其标准库,所以不需要安装。_学小易找答案...
- 安装两个mysql3308_在同一台机器上安装两个版本的MySQL