某进程相关算法笔试题
输入多个进程,每个进程由括号隔开,其中第一个数为数据,第二个数为优先级。当程序运行起来,应当先执行优先级最高的进程;当优先级相同,应当按先进先出执行相关进程,当两个进程的数据和优先级完全相同,则舍去排在后面的该进程。
输入:(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="")