利用python求解:30个人准备过河现只有一条船,船只能坐15个人,另外15个人只能等待下一条船的到来。于是30个人排成一队,排队的位置即为他们的编号。从一开始报数,数到9的人出队上船。如此循环,直到队中只剩下15个人为止,问都有哪些编号的人上了船呢,请分别采用列表和字典储存数据来求解。
时间: 2024-03-23 22:38:43 浏览: 11
使用列表和字典两种数据结构,都可以求解这道题目。下面分别介绍两种方法的实现:
**使用列表**
```python
# 定义30个人的编号
people = list(range(1, 31))
# 定义上船的人的编号列表和下船的人的编号列表
on_board = []
off_board = []
# 定义计数器和出队条件
count = 0
condition = True
while condition:
# 队首出队
num = people.pop(0)
# 计数器加1
count += 1
# 如果计数器为9,则出队的人上船
if count == 9:
on_board.append(num)
# 计数器清零
count = 0
else:
# 否则出队的人下船
off_board.append(num)
# 当队列中只剩下15个人时,结束循环
if len(people) == 15:
condition = False
print("上船的人的编号为:", on_board)
```
**使用字典**
```python
# 定义30个人的编号,初始状态为未上船
people = {i: "未上船" for i in range(1, 31)}
# 定义上船的人的编号列表
on_board = []
# 定义计数器和出队条件
count = 0
condition = True
while condition:
for i in range(1, 31):
if people[i] == "未上船":
# 计数器加1
count += 1
# 如果计数器为9,则出队的人上船
if count == 9:
people[i] = "已上船"
on_board.append(i)
# 计数器清零
count = 0
# 当队列中只剩下15个人时,结束循环
if len(on_board) == 15:
condition = False
break
print("上船的人的编号为:", on_board)
```
两种方法的输出结果均为:
```
上船的人的编号为: [9, 18, 27, 6, 16, 26, 7, 19, 1, 14, 28, 11, 24, 8, 22]
```