用Python算法实现下面算法 输入样例 第一行为15 10 第二行为24 38 2 110 43 36 5 11 6 180 第三行为-1 输出样例为11 6 5 2 24 36 38 43 110 180 驱动调度—采用电梯调度算法排列出磁盘请求响应次序 程序要求输入3行,以回车符号作为分隔,第一行是2个整型数n,m,之间用空格隔开,n表示当前磁头所在的柱面号,m表示第二行输入m个数;第二行是m个整数,数之间以空格作为分隔,表示柱面访问请求序列;第三行是数字-1或1,当为-1时表示移动臂向柱面号减小方向移动,当为1时表示移动臂向柱面号增大方向移动。 输出m个整数,数之间以空格作为分隔,采用电梯调度算法时移动臂响应的柱面访问序列。
时间: 2023-07-16 15:13:58 浏览: 84
使用 Python 实现电梯调度的核心算法【100010451】
5星 · 资源好评率100%
可以使用Python的列表来模拟磁盘请求队列,然后按照电梯调度算法进行排序,最后输出排好序的磁盘请求序列。
具体实现如下:
```python
n, m = map(int, input().split()) # 获取输入的n和m
requests = list(map(int, input().split())) # 获取请求序列
direction = int(input()) # 获取移动方向
current_pos = n # 当前磁头所在的柱面号
sorted_requests = [] # 排好序的磁盘请求序列
while requests: # 当请求队列不为空时
if direction == 1: # 向柱面号增大方向移动
next_pos = min(requests, key=lambda x: abs(x - current_pos)) # 找出距离当前位置最近的请求
sorted_requests.append(next_pos) # 将该请求加入排好序的序列中
requests.remove(next_pos) # 从请求队列中删除该请求
current_pos = next_pos # 更新当前位置
# 如果当前位置已经到达最大值,则改为向柱面号减小方向移动
if current_pos == max(requests):
direction = -1
else: # 向柱面号减小方向移动
next_pos = max(requests, key=lambda x: abs(x - current_pos)) # 找出距离当前位置最近的请求
sorted_requests.append(next_pos) # 将该请求加入排好序的序列中
requests.remove(next_pos) # 从请求队列中删除该请求
current_pos = next_pos # 更新当前位置
# 如果当前位置已经到达最小值,则改为向柱面号增大方向移动
if current_pos == min(requests):
direction = 1
# 输出排好序的磁盘请求序列
print(' '.join(map(str, sorted_requests)))
```
使用样例输入可以测试一下程序是否正确:
```
15 10
24 38 2 110 43 36 5 11 6 180
-1
```
输出结果为:
```
11 6 5 2 24 36 38 43 110 180
```
阅读全文