约瑟夫环的系统源代码
时间: 2023-09-14 22:09:27 浏览: 36
以下是Python实现的约瑟夫环系统源代码,包括输入模块、约瑟夫环数据结构模块、模拟出局过程模块和输出模块:
```python
# 输入模块
def get_input():
while True:
try:
total_num = int(input("请输入总人数: "))
if total_num <= 0:
raise ValueError
break
except ValueError:
print("请输入一个正整数!")
while True:
try:
step = int(input("请输入每隔几个人出局: "))
if step <= 0:
raise ValueError
break
except ValueError:
print("请输入一个正整数!")
return total_num, step
# 约瑟夫环数据结构模块
class Node:
def __init__(self, data):
self.data = data
self.next = None
class LinkedList:
def __init__(self):
self.head = None
self.tail = None
def add_node(self, data):
new_node = Node(data)
if self.head is None:
self.head = new_node
self.tail = new_node
self.tail.next = self.head
else:
self.tail.next = new_node
self.tail = new_node
self.tail.next = self.head
def remove_node(self, node):
if self.head == node:
self.head = node.next
self.tail.next = self.head
else:
current = self.head
while current.next != node:
current = current.next
current.next = node.next
if self.tail == node:
self.tail = current
# 模拟出局过程模块
def josephus_circle(linked_list, step):
current = linked_list.head
while len(linked_list) > 1:
for i in range(step - 1):
current = current.next
linked_list.remove_node(current)
current = current.next
return linked_list.head.data
# 输出模块
def show_result(result):
print("最后剩下的人的编号是: ", result)
# 主程序
if __name__ == "__main__":
total_num, step = get_input()
linked_list = LinkedList()
for i in range(1, total_num + 1):
linked_list.add_node(i)
result = josephus_circle(linked_list, step)
show_result(result)
```
用户可以在控制台上运行此程序,根据提示输入总人数和每隔几个人出局的参数,程序会输出最后剩下的节点的编号。