.约瑟夫问题:N个人围成一圈,从第一个人开始报数,数到M的人出圈;再由下一个人开始报数,数到M的人出圈;…输出依次出圈的人的编号。N,M由键盘输入。C
时间: 2023-06-08 15:08:42 浏览: 50
好的,我知道了。这是一个经典的约瑟夫问题。我们可以用一个循环链表来模拟这个过程。首先,我们将N个人依次插入循环链表中。然后,我们从第一个人开始报数,每次报到M时,就将该节点从链表中删除。直到链表只剩下一个节点为止。最后,输出依次出圈的人的编号。下面是一个可能的实现代码:
```python
class Node:
def __init__(self, data):
self.data = data
self.next = None
def josephus(n, m):
head = Node(1)
prev = head
for i in range(2, n+1):
prev.next = Node(i)
prev = prev.next
prev.next = head # make it circular
count = 0
while head.next != head:
count += 1
if count == m:
count = 0
print(head.next.data, end=' ')
head.next = head.next.next
else:
head = head.next
print(head.data) # print the last survivor
n = int(input("请输入N的值:"))
m = int(input("请输入M的值:"))
josephus(n, m)
```
希望这个代码可以帮助你解决约瑟夫问题。如有不明白之处,欢迎继续咨询。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)