110,539
社区成员
发帖
与我相关
我的任务
分享
static void AllotApple(List<Person> persons, int totalApples)
{
if (persons.Count < 2)
{
throw new Exception("如果要分配,那人数至少要二人");
}
while (totalApples > 0)
{
var tmpPersons = persons.OrderBy(x => x.AppleNow + x.AppleAdd).Take(2).ToList();
var addApples = Math.Min(totalApples, tmpPersons[1].AppleAdd + tmpPersons[1].AppleNow - tmpPersons[0].AppleAdd - tmpPersons[0].AppleNow);
if (addApples == 0)
{
addApples = 1;
}
tmpPersons[0].AppleAdd += addApples;
totalApples -= addApples;
Console.WriteLine("分配数量:" + addApples);
}
persons.ForEach(x =>
{
Console.WriteLine(x.AppleAdd);//这就是你要的分配数据
Console.WriteLine(x.AppleAdd + x.AppleNow);//这是最终分配时每个人的苹果总数量
Console.WriteLine("##################");
});
}
再写个改善代码,可以减少分配次数public class Person
{
public int AppleNow { get; set; }
public int AppleAdd { get; set; }
}
static void AllotApple(List<Person> persons, int totalApples)
{
while (totalApples > 0)
{
var person = persons.OrderBy(x => x.AppleNow + x.AppleAdd).First();
person.AppleAdd++;
totalApples--;
}
persons.ForEach(x =>
{
Console.WriteLine(x.AppleAdd);//这就是你要的分配数据
Console.WriteLine(x.AppleAdd + x.AppleNow);//这是最终分配时每个人的苹果总数量
Console.WriteLine("##################");
});
}
都这样子了还不会改下代码啊……
List<Person> persons = new List<Person>() { new Person() { AppleNow = 1 }, new Person() { AppleNow = 5 }, new Person() };
AllotApple(persons, 20);
public class Person
{
public int AppleCount { get; set; }
}
static void AllotApple(List<Person> persons, int totalApples)
{
while (totalApples > 0)
{
var person = persons.OrderBy(x => x.AppleCount).First();
person.AppleCount++;
totalApples--;
}
persons.ForEach(x =>
{
Console.WriteLine(x.AppleCount);
});
}
调用方法
List<Person> persons = new List<Person>() { new Person() { AppleCount = 1 }, new Person() { AppleCount = 5 }, new Person() };
AllotApple(persons, 20);