输入N(N>0)个作业,输入每个作业的名字,到达时间,服务时间,按照短作业优先算法,计算每个作业的完成时间,周转时间,带权周转时间(保留2位小数)。 输入格式: 第一行输入作业数目,第二行输入作业的名字,第三行输入到达时间,第四行输入服务时间。 输出格式: 按照到达时间从小到大排序,第一行输出作业的名字,第二行输出到达时间,第三行输出服务时间,第四行输出完成时间,第五行输出完成时间,第六行输出带权周转时间。 输入样例: 在这里给出一组输入。例如: 5 A B C D E 0 1 2 3 4 4 3 1 2 4 输出样例: 在这里给出相应的输出。例如: 作 业 名:A B C D E 到达时间:0 1 2 3 4 服务时间:4 3 1 2 4 完成时间:4 10 5 7 14 周转时间:4 9 3 4 10 带权周转时间:1.00 3.00 3.00 2.00 2.50
时间: 2023-06-15 21:08:24 浏览: 80
下面是一个 Python3 的代码实现,用于解决这道作业调度问题:
```python
n = int(input()) # 作业数目
jobs = [] # 存储作业信息的列表
for i in range(n):
name, arrive_time, service_time = input().split()
arrive_time, service_time = int(arrive_time), int(service_time)
jobs.append((name, arrive_time, service_time))
jobs.sort(key=lambda x: x[1]) # 按照到达时间从小到大排序
finish_time = [0] * n # 存储每个作业的完成时间
turnaround_time = [0] * n # 存储每个作业的周转时间
weighted_turnaround_time = [0] * n # 存储每个作业的带权周转时间
for i in range(n):
name, arrive_time, service_time = jobs[i]
if i == 0:
finish_time[i] = arrive_time + service_time
else:
finish_time[i] = max(arrive_time, finish_time[i-1]) + service_time
turnaround_time[i] = finish_time[i] - arrive_time
weighted_turnaround_time[i] = round(turnaround_time[i] / service_time, 2)
# 打印结果
print('作 业 名:', end='')
for i in range(n):
print(jobs[i][0], end=' ')
print()
print('到达时间:', end='')
for i in range(n):
print(jobs[i][1], end=' ')
print()
print('服务时间:', end='')
for i in range(n):
print(jobs[i][2], end=' ')
print()
print('完成时间:', end='')
for i in range(n):
print(finish_time[i], end=' ')
print()
print('周转时间:', end='')
for i in range(n):
print(turnaround_time[i], end=' ')
print()
print('带权周转时间:', end='')
for i in range(n):
print(weighted_turnaround_time[i], end=' ')
print()
```
代码的主要思路是先读入作业信息,然后按照到达时间从小到大排序。接着,依次计算每个作业的完成时间、周转时间和带权周转时间,并将结果打印出来。
阅读全文