某进程相关算法笔试题

输入多个进程,每个进程由括号隔开,其中第一个数为数据,第二个数为优先级。当程序运行起来,应当先执行优先级最高的进程;当优先级相同,应当按先进先出执行相关进程,当两个进程的数据和优先级完全相同,则舍去排在后面的该进程。

输入:(10,1),(20,1),(30,2),(40,3)
输出:40,30,10,20
输入:(10,1),(10,1),(30,2),(40,3)
输出:40,30,10

代码

# 读取输入
str1 = input()
# 转为嵌套列表
result = []
li1 = str1[1:-1].split("),(")
for i in li1:
    li2 = i.split(",")
    li2 = list(map(int,li2))
    result.append(li2)

# 判断进程是否相同,即列表是否相同
def judge_samelist(li1,li2):
    if len(li1) == len(li2):
        for i in range(len(li1)):
            if li1[i] != li2[i]:
                return False
        return True

# 测试
# result = [[20, 1], [10, 1], [30, 2], [40, 3]]
# index_num = 0

# 插入排序
for i in range(1,len(result)):
    # tmp临时存放取出的无序区的元素
    tmp = result[i]
    # j为有序区的元素的下标
    # 循环里从右往左判断无序区取出的元素与该元素的大小
    j = i - 1
    # 如果无序区取出的元素比有序区的元素大或相等,有序区的元素右移
    # 为了保证相同优先级按照先进先出的顺序需要将等于也添加进去
    while j >= 0 and result[j][1] <= tmp[1]:
        result[j+1] = result[j]
        j -= 1
    # 循环结束后将无序区取出的元素放在空位上
    result[j+1] = tmp
    # 测试,打印每趟列表的变化
    # print(result)

# 删除重复的进程
for i in range(1,len(result)):
    if judge_samelist(result[i],result[i-1]):
        result.remove(i)
# 输出
for i in range(len(result)):
    if result[i][0] != result[-1][0]:
        print(result[i][0],end=",")
    else:
        print(result[i][0],end="")