问题描述
30 个人在一条船上,超载,需要 15 人下船。
于是人们排成一队,排队的位置即为他们的编号。
报数,从 1 开始,数到 9 的人下船。
如此循环,直到船上仅剩 15 人为止,问都有哪些编号的人下船了呢?
算法思路
- 用环形链表去构造数据结构
- 每逢9的倍数,将该链表删除,指针指向下一个数字
核心代码
# 首先构造环形链表,这个很基本不多说
# 删除链表操作
while remain_people != 15:
for ii in range(1,8): # 前7次运动是没有任何问题的
ptr = ptr.next
else: # 第8次运动,需要跳过第9个数,并将其删除
# 打印9号链表
print(ptr,'{}号下船了'.format(ptr.next.name))
# 删除9号链表(同时跳过这个数)
ptr.next = ptr.next.next
remain_people -= 1
# 指针向前运动一次
ptr = ptr.next
完整代码实现

本文介绍了一个使用Python解决约瑟夫生死小游戏的问题。30人需要通过报数淘汰15人,每数到9的人下船。通过构建环形链表,每当遇到9的倍数时删除节点。文章提供了核心代码和完整实现,强调了在编写代码前理解问题、设计数据结构和算法的重要性,以及在编写过程中逐步完善的编程实践。
最低0.47元/天 解锁文章
1588

被折叠的 条评论
为什么被折叠?



