用python算法写下面题目 驱动调度-采用电梯调度算法排列出磁盘请求响应次序 题目描述: 要求输入一个柱面访问请求序列以及当前磁头所在柱面号和移动方向,输出采用电梯调度算法时移动臂响应的柱面访问序列 输入格式: 程序要求输入3行,以回车符号作为分隔 第1行是2个整数n、m,之间用空格隔开,n表示当前磁头所在的柱面号;m表示第二行输入m个数 第2行是m个整数,数之间以空格作为分隔,表示柱面访问请求序列 第3行是数字 -1 或 1,当为 -1 时表示移动臂向柱面号减小方向移动,当为 1 时表示移动臂向柱面号增大方向移动 输出格式: 输出m个整数,数之间以空格作为分隔,采用电梯调度算法时移动臂响应的柱面访问序列。 测试数据: 样例输入1: 15 10 24 38 2 110 43 36 5 11 6 180 -1 样例输出1: 11 6 5 2 24 36 38 43 110 180
时间: 2023-07-16 17:13:40 浏览: 185
以下是Python代码实现。
```python
n, m = map(int, input().split())
request = list(map(int, input().split()))
direction = int(input())
# 初始方向为向右,即增大方向
move_direction = 1
# 将请求按照方向排序
if direction == -1:
request = sorted(request, reverse=True)
move_direction = -1
else:
request = sorted(request)
# 加入起始点
request.append(n)
request.insert(0, n)
cur_pos = request.index(n)
result = []
while len(request) > 2:
if move_direction == 1:
for i in range(cur_pos+1, len(request)):
result.append(request[i])
for i in range(cur_pos-1, -1, -1):
result.append(request[i])
else:
for i in range(cur_pos-1, -1, -1):
result.append(request[i])
for i in range(cur_pos+1, len(request)):
result.append(request[i])
cur_pos = 0
request = result.copy()
result = []
print(" ".join(str(x) for x in request[1:-1]))
```
算法流程如下:
1. 读取输入数据,将请求按照方向排序,并加入起始点和终止点。
2. 初始化当前位置为起始点的位置,初始化结果列表为空。
3. 当请求列表长度大于2时,根据移动方向依次遍历请求列表,将结果添加到结果列表中。
4. 更新当前位置为起始点的位置,将请求列表替换为结果列表,清空结果列表。
5. 输出结果列表中除起始点和终止点的所有元素。
注意:这里没有考虑请求列表为空的情况,需要根据实际情况进行处理。
阅读全文