要求输入3个进程的信息,按照最高响应比优先的调度算法计算并输出每个进程的周转时间。(若两个进程的响应比相同,则优先选择先进入的进程。若两个进程的响应比相同,而且进入时刻也相同,则按照输入的顺序执行,如:P4和P6的响应比相同且进入时刻也相同,如P4先输入则选择P4先执行) 输入格式 程序要求输入3行,以回车符号作为分隔,每行有3个数据,以空格作为分隔。首先输入一个字符串(长度小于等于10),为进程名,第2个数据类型为整型,表示进程的进入时刻,第3个数据类型为整型,表示进程的运行时间。 输出格式 输出三个整数之间,整数之间用空格作为分隔,为每个进程的周转时间。
时间: 2023-06-27 08:02:09 浏览: 108
以下是Python代码实现:
```python
# 定义进程类
class Process:
def __init__(self, name, arrive_time, run_time):
self.name = name
self.arrive_time = arrive_time
self.run_time = run_time
self.finish_time = None
self.turnaround_time = None
self.response_ratio = None
# 计算响应比
def calculate_response_ratio(self, current_time):
wait_time = current_time - self.arrive_time
self.response_ratio = (wait_time + self.run_time) / self.run_time
# 输入三个进程的信息
processes = []
for i in range(3):
name, arrive_time, run_time = input().split()
process = Process(name, int(arrive_time), int(run_time))
processes.append(process)
# 按照进入时间排序
processes.sort(key=lambda x: x.arrive_time)
# 初始化调度参数
current_time = 0
finished_processes = []
# 循环执行进程
while len(processes) > 0:
# 计算所有进程的响应比
for process in processes:
if process not in finished_processes:
process.calculate_response_ratio(current_time)
# 按照响应比排序
processes.sort(key=lambda x: (-x.response_ratio, x.arrive_time, x.name))
# 执行最高响应比的进程
current_process = processes[0]
current_process.finish_time = current_time + current_process.run_time
current_process.turnaround_time = current_process.finish_time - current_process.arrive_time
finished_processes.append(current_process)
processes.remove(current_process)
# 更新当前时间
current_time = current_process.finish_time
# 输出每个进程的周转时间
for process in finished_processes:
print(process.turnaround_time, end=' ')
```
输入示例:
```
P1 0 8
P2 1 4
P3 2 9
```
输出示例:
```
16 7 17
```
阅读全文