部门优化某公司内有4个项目组,项目组A、B、C、D,项目组A现有10人,项目组B现有7人,项目组C现有5人,项目组D现有4人。为了实现跨项目组协作,公司决定每月从人数最多的项目组中抽调3人出来,到其他剩下3组中,每组1人,这称之为一次调整优化(亦即经过第一次调整后,A组有7人,B组有8人,C组有6人,D组有5人)。那么请问,经过十年的优化调整后,各项目组各有几人?编程求解该问题,并思考是否为最优解。
/// <summary> /// /// </summary> /// <param name="a">a部门</param> /// <param name="b">b部门</param> /// <param name="c">c部门</param> /// <param name="d">d部门</param> /// <param name="count">调整次数</param> public static void MaxPub(int a,int b,int c,int d,int count) { Dictionary<string, int> keyValues = new Dictionary<string, int>(); keyValues.Add("a", a); keyValues.Add("b", b); keyValues.Add("c", c); keyValues.Add("d", d); for (int i = 0; i < count; i++) { string max= keyValues.Keys.Select(x => new { x, y = keyValues[x] }).OrderBy(x => x.y).Last().x; keyValues[max] = keyValues[max] - 4; for (int j = 0; j < keyValues.Keys.Count; j++) { var item = keyValues.ElementAt(j); keyValues[item.Key]= item.Value + 1; } } }