请用python实现:有n个人围成一圈(编号为1~n),从第1号开始进行1、2、3报数,凡报3者就退出,下一个人又从1开始报数……直到最后只剩下一个人时为止。请问此人原来的位置是多少号? 输入格式: 测试数据有多组,处理到文件尾。每组测试输入一个整数n(5≤n≤100)。 输出格式: 对于每组测试,输出最后剩下那个人的编号。
时间: 2024-03-02 15:52:16 浏览: 69
1模拟轮盘抽奖游戏2模拟报数游戏(约瑟夫环问题)_抽奖轮盘_模拟报数游戏_模拟轮盘抽奖游戏_游戏_用python实现_
可以使用循环链表来解决这道题目。
具体步骤如下:
1. 构建一个循环链表,链表节点中保存当前编号和指向下一个节点的指针。
2. 从第一个节点开始,循环遍历链表,每次数到第三个节点就将该节点从链表中删除。
3. 直到链表中只剩下一个节点,输出该节点的编号即为答案。
下面是代码实现:
```python
class Node:
def __init__(self, num):
self.num = num
self.next = None
def find_last(n):
# 构建循环链表
head = Node(1)
curr = head
for i in range(2, n+1):
node = Node(i)
curr.next = node
curr = node
curr.next = head
# 循环遍历链表,每隔两个节点删除一个节点
while curr.next != curr:
for i in range(2):
curr = curr.next
curr.next = curr.next.next
return curr.num
if __name__ == '__main__':
while True:
try:
n = int(input())
print(find_last(n))
except:
break
```
输入示例:
```
5
10
```
输出示例:
```
3
5
```
阅读全文