部门优化某公司内有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;
}
}
}