python循环队列实现约瑟夫问题
时间: 2023-10-30 20:02:57 浏览: 125
python实现约瑟夫问题
约瑟夫问题是一个经典的数学问题,解法中可以使用循环队列来实现。下面是使用Python编写的约瑟夫问题的循环队列实现代码:
```python
class CircularQueue:
def __init__(self, size):
self.size = size
self.queue = [None] * size
self.front = self.rear = -1
def enqueue(self, item):
if (self.rear + 1) % self.size == self.front:
print("Queue is full!")
elif self.front == -1:
self.front = self.rear = 0
self.queue[self.rear] = item
else:
self.rear = (self.rear + 1) % self.size
self.queue[self.rear] = item
def dequeue(self):
if self.front == -1:
print("Queue is empty!")
elif self.front == self.rear:
temp = self.queue[self.front]
self.front = self.rear = -1
return temp
else:
temp = self.queue[self.front]
self.front = (self.front + 1) % self.size
return temp
def josephus_problem(n, m):
queue = CircularQueue(n)
for i in range(1, n + 1):
queue.enqueue(i)
count = 0
while queue.front != -1:
count += 1
if count == m:
print(queue.dequeue())
count = 0
else:
queue.enqueue(queue.dequeue())
n = int(input("请输入总人数:"))
m = int(input("请输入报数的数字:"))
josephus_problem(n, m)
```
这段代码实现了一个循环队列类`CircularQueue`,其中包含`enqueue`和`dequeue`方法用于入队和出队操作。在`josephus_problem`函数中,首先根据总人数创建一个循环队列,并将每个人依次入队。然后,通过模运算来判断报数是否满足条件,如果满足则出队并输出,否则将当前人重新入队。最终会依次输出约瑟夫问题中的出队顺序。
阅读全文