问题:
某公司内有 4 个项⽬组,项⽬组 A、B、C、D,项⽬组A现有10⼈,项⽬组B现有7⼈,项⽬组C现 有5⼈, 项⽬组D现有4⼈。为了实现跨项⽬组协作,公司决定每⽉从⼈数最多的项⽬组中抽调 3 ⼈ 出来,到其他剩下 3 组中,每组 1 ⼈,这称之为⼀次调整优化(亦即经过第⼀次调整后,A组有7 ⼈,B组有8⼈,C组有6⼈,D组有5⼈)。 那么请问,经过⼗年的优化调整后,各项⽬组各有⼏⼈? 编程求解该问题,并思考是否为最优解。分析:
从题目可知,思路就是找出ABCD四个项目组中哪个项目组人最多,将人数减3,其他三个部门各自加1,每月优化
一次,十年就是120次。
代码:
# -*- coding: utf-8 -*- ''' 某公司内有 4 个项⽬组,项⽬组 A、B、C、D,项⽬组A现有10⼈,项⽬组B现有7⼈,项⽬组C现 有5⼈, 项⽬组D现有4⼈。为了实现跨项⽬组协作,公司决定每⽉从⼈数最多的项⽬组中抽调 3 ⼈ 出来,到其他剩下 3 组中,每组 1 ⼈,这称之为⼀次调整优化(亦即经过第⼀次调整后,A组有7 ⼈,B组有8⼈,C组有6⼈,D组有5⼈)。 那么请问,经过⼗年的优化调整后,各项⽬组各有⼏⼈? 编程求解该问题,并思考是否为最优解。 ''' class Solution: def result(self,year): project_dic = { 'A':10, 'B':7, 'C':5, 'D':4 } for i in range(12*year): max_Value = self.get_MaxValueDic(project_dic) self.optimization(project_dic,max_Value) print(f'第{i+1}月优化后:{project_dic}') def optimization(self,ori_dic,max_Value): for k in ori_dic.keys(): if k==max_Value: ori_dic[k]=ori_dic[k]-3 else: ori_dic[k]=ori_dic[k]+1 def get_MaxValueDic(self,target_dic): for k,v in target_dic.items(): if v == max(target_dic.values()): return k if __name__=="__main__": s = Solution() s.result(10)
结果:
第1月优化后:{'A': 7, 'B': 8, 'C': 6, 'D': 5} 第2月优化后:{'A': 8, 'B': 5, 'C': 7, 'D': 6} 第3月优化后:{'A': 5, 'B': 6, 'C': 8, 'D': 7} 第4月优化后:{'A': 6, 'B': 7, 'C': 5, 'D': 8} 第5月优化后:{'A': 7, 'B': 8, 'C': 6, 'D': 5} 第6月优化后:{'A': 8, 'B': 5, 'C': 7, 'D': 6} 第7月优化后:{'A': 5, 'B': 6, 'C': 8, 'D': 7} 第8月优化后:{'A': 6, 'B': 7, 'C': 5, 'D': 8} 第9月优化后:{'A': 7, 'B': 8, 'C': 6, 'D': 5} 第10月优化后:{'A': 8, 'B': 5, 'C': 7, 'D': 6} 第11月优化后:{'A': 5, 'B': 6, 'C': 8, 'D': 7} 第12月优化后:{'A': 6, 'B': 7, 'C': 5, 'D': 8} 第13月优化后:{'A': 7, 'B': 8, 'C': 6, 'D': 5} 第14月优化后:{'A': 8, 'B': 5, 'C': 7, 'D': 6} 第15月优化后:{'A': 5, 'B': 6, 'C': 8, 'D': 7} 第16月优化后:{'A': 6, 'B': 7, 'C': 5, 'D': 8} 第17月优化后:{'A': 7, 'B': 8, 'C': 6, 'D': 5} 第18月优化后:{'A': 8, 'B': 5, 'C': 7, 'D': 6} 第19月优化后:{'A': 5, 'B': 6, 'C': 8, 'D': 7} 第20月优化后:{'A': 6, 'B': 7, 'C': 5, 'D': 8} 第21月优化后:{'A': 7, 'B': 8, 'C': 6, 'D': 5} 第22月优化后:{'A': 8, 'B': 5, 'C': 7, 'D': 6} 第23月优化后:{'A': 5, 'B': 6, 'C': 8, 'D': 7} 第24月优化后:{'A': 6, 'B': 7, 'C': 5, 'D': 8} 第25月优化后:{'A': 7, 'B': 8, 'C': 6, 'D': 5} 第26月优化后:{'A': 8, 'B': 5, 'C': 7, 'D': 6} 第27月优化后:{'A': 5, 'B': 6, 'C': 8, 'D': 7} 第28月优化后:{'A': 6, 'B': 7, 'C': 5, 'D': 8} 第29月优化后:{'A': 7, 'B': 8, 'C': 6, 'D': 5} 第30月优化后:{'A': 8, 'B': 5, 'C': 7, 'D': 6} 第31月优化后:{'A': 5, 'B': 6, 'C': 8, 'D': 7} 第32月优化后:{'A': 6, 'B': 7, 'C': 5, 'D': 8} 第33月优化后:{'A': 7, 'B': 8, 'C': 6, 'D': 5} 第34月优化后:{'A': 8, 'B': 5, 'C': 7, 'D': 6} 第35月优化后:{'A': 5, 'B': 6, 'C': 8, 'D': 7} 第36月优化后:{'A': 6, 'B': 7, 'C': 5, 'D': 8} 第37月优化后:{'A': 7, 'B': 8, 'C': 6, 'D': 5} 第38月优化后:{'A': 8, 'B': 5, 'C': 7, 'D': 6} 第39月优化后:{'A': 5, 'B': 6, 'C': 8, 'D': 7} 第40月优化后:{'A': 6, 'B': 7, 'C': 5, 'D': 8} 第41月优化后:{'A': 7, 'B': 8, 'C': 6, 'D': 5} 第42月优化后:{'A': 8, 'B': 5, 'C': 7, 'D': 6} 第43月优化后:{'A': 5, 'B': 6, 'C': 8, 'D': 7} 第44月优化后:{'A': 6, 'B': 7, 'C': 5, 'D': 8} 第45月优化后:{'A': 7, 'B': 8, 'C': 6, 'D': 5} 第46月优化后:{'A': 8, 'B': 5, 'C': 7, 'D': 6} 第47月优化后:{'A': 5, 'B': 6, 'C': 8, 'D': 7} 第48月优化后:{'A': 6, 'B': 7, 'C': 5, 'D': 8} 第49月优化后:{'A': 7, 'B': 8, 'C': 6, 'D': 5} 第50月优化后:{'A': 8, 'B': 5, 'C': 7, 'D': 6} 第51月优化后:{'A': 5, 'B': 6, 'C': 8, 'D': 7} 第52月优化后:{'A': 6, 'B': 7, 'C': 5, 'D': 8} 第53月优化后:{'A': 7, 'B': 8, 'C': 6, 'D': 5} 第54月优化后:{'A': 8, 'B': 5, 'C': 7, 'D': 6} 第55月优化后:{'A': 5, 'B': 6, 'C': 8, 'D': 7} 第56月优化后:{'A': 6, 'B': 7, 'C': 5, 'D': 8} 第57月优化后:{'A': 7, 'B': 8, 'C': 6, 'D': 5} 第58月优化后:{'A': 8, 'B': 5, 'C': 7, 'D': 6} 第59月优化后:{'A': 5, 'B': 6, 'C': 8, 'D': 7} 第60月优化后:{'A': 6, 'B': 7, 'C': 5, 'D': 8} 第61月优化后:{'A': 7, 'B': 8, 'C': 6, 'D': 5} 第62月优化后:{'A': 8, 'B': 5, 'C': 7, 'D': 6} 第63月优化后:{'A': 5, 'B': 6, 'C': 8, 'D': 7} 第64月优化后:{'A': 6, 'B': 7, 'C': 5, 'D': 8} 第65月优化后:{'A': 7, 'B': 8, 'C': 6, 'D': 5} 第66月优化后:{'A': 8, 'B': 5, 'C': 7, 'D': 6} 第67月优化后:{'A': 5, 'B': 6, 'C': 8, 'D': 7} 第68月优化后:{'A': 6, 'B': 7, 'C': 5, 'D': 8} 第69月优化后:{'A': 7, 'B': 8, 'C': 6, 'D': 5} 第70月优化后:{'A': 8, 'B': 5, 'C': 7, 'D': 6} 第71月优化后:{'A': 5, 'B': 6, 'C': 8, 'D': 7} 第72月优化后:{'A': 6, 'B': 7, 'C': 5, 'D': 8} 第73月优化后:{'A': 7, 'B': 8, 'C': 6, 'D': 5} 第74月优化后:{'A': 8, 'B': 5, 'C': 7, 'D': 6} 第75月优化后:{'A': 5, 'B': 6, 'C': 8, 'D': 7} 第76月优化后:{'A': 6, 'B': 7, 'C': 5, 'D': 8} 第77月优化后:{'A': 7, 'B': 8, 'C': 6, 'D': 5} 第78月优化后:{'A': 8, 'B': 5, 'C': 7, 'D': 6} 第79月优化后:{'A': 5, 'B': 6, 'C': 8, 'D': 7} 第80月优化后:{'A': 6, 'B': 7, 'C': 5, 'D': 8} 第81月优化后:{'A': 7, 'B': 8, 'C': 6, 'D': 5} 第82月优化后:{'A': 8, 'B': 5, 'C': 7, 'D': 6} 第83月优化后:{'A': 5, 'B': 6, 'C': 8, 'D': 7} 第84月优化后:{'A': 6, 'B': 7, 'C': 5, 'D': 8} 第85月优化后:{'A': 7, 'B': 8, 'C': 6, 'D': 5} 第86月优化后:{'A': 8, 'B': 5, 'C': 7, 'D': 6} 第87月优化后:{'A': 5, 'B': 6, 'C': 8, 'D': 7} 第88月优化后:{'A': 6, 'B': 7, 'C': 5, 'D': 8} 第89月优化后:{'A': 7, 'B': 8, 'C': 6, 'D': 5} 第90月优化后:{'A': 8, 'B': 5, 'C': 7, 'D': 6} 第91月优化后:{'A': 5, 'B': 6, 'C': 8, 'D': 7} 第92月优化后:{'A': 6, 'B': 7, 'C': 5, 'D': 8} 第93月优化后:{'A': 7, 'B': 8, 'C': 6, 'D': 5} 第94月优化后:{'A': 8, 'B': 5, 'C': 7, 'D': 6} 第95月优化后:{'A': 5, 'B': 6, 'C': 8, 'D': 7} 第96月优化后:{'A': 6, 'B': 7, 'C': 5, 'D': 8} 第97月优化后:{'A': 7, 'B': 8, 'C': 6, 'D': 5} 第98月优化后:{'A': 8, 'B': 5, 'C': 7, 'D': 6} 第99月优化后:{'A': 5, 'B': 6, 'C': 8, 'D': 7} 第100月优化后:{'A': 6, 'B': 7, 'C': 5, 'D': 8} 第101月优化后:{'A': 7, 'B': 8, 'C': 6, 'D': 5} 第102月优化后:{'A': 8, 'B': 5, 'C': 7, 'D': 6} 第103月优化后:{'A': 5, 'B': 6, 'C': 8, 'D': 7} 第104月优化后:{'A': 6, 'B': 7, 'C': 5, 'D': 8} 第105月优化后:{'A': 7, 'B': 8, 'C': 6, 'D': 5} 第106月优化后:{'A': 8, 'B': 5, 'C': 7, 'D': 6} 第107月优化后:{'A': 5, 'B': 6, 'C': 8, 'D': 7} 第108月优化后:{'A': 6, 'B': 7, 'C': 5, 'D': 8} 第109月优化后:{'A': 7, 'B': 8, 'C': 6, 'D': 5} 第110月优化后:{'A': 8, 'B': 5, 'C': 7, 'D': 6} 第111月优化后:{'A': 5, 'B': 6, 'C': 8, 'D': 7} 第112月优化后:{'A': 6, 'B': 7, 'C': 5, 'D': 8} 第113月优化后:{'A': 7, 'B': 8, 'C': 6, 'D': 5} 第114月优化后:{'A': 8, 'B': 5, 'C': 7, 'D': 6} 第115月优化后:{'A': 5, 'B': 6, 'C': 8, 'D': 7} 第116月优化后:{'A': 6, 'B': 7, 'C': 5, 'D': 8} 第117月优化后:{'A': 7, 'B': 8, 'C': 6, 'D': 5} 第118月优化后:{'A': 8, 'B': 5, 'C': 7, 'D': 6} 第119月优化后:{'A': 5, 'B': 6, 'C': 8, 'D': 7} 第120月优化后:{'A': 6, 'B': 7, 'C': 5, 'D': 8}
从结果可知并不是最优解,因为从第二次优化,项目组人数都是 5 6 7 8这几个数。