Я сейчас работаю над алгоритмом, который разделяет список целых чисел, но я не могу понять, как это сделать. У меня есть список целых чисел, которые мне придется разделить на 3 списка, и сумма всех этих списков должна быть максимально аналогичной. Я начал с демонстрационного проекта с этим списком: < /p>
List numbers = new List { 1, 2, 3, 4, 5 };
< /code>
В этом случае результат должен быть: < /p>
list1 = {1,4};
list2 = {3,2};
list3 = {5};
< /code>
И вот мой код: < /p>
public static List ProvideLists(List originalList)
{
List result
= new List { new List(), new List(), new List() };
var listToParse = originalList;
while (listToParse.Count > 0)
{
var smalestList =
result.Aggregate((a, b) => a.Sum() < b.Sum() ? a : b);
var biggestList =
result.Aggregate((a, b) => a.Sum() > b.Sum() ? a : b);
var diffSmallBig = biggestList.Sum() - smalestList.Sum();
var closestNumber =
listToParse.OrderBy(x => Math.Abs(x - diffSmallBig)).First();
listToParse.Remove(closestNumber);
smalestList.Add(closestNumber);
}
return result;
}
< /code>
В настоящее время этот код возвращает: < /p>
list1 = {3};
list2 = {5,2};
list3 = {4,1};
Если у кого -то есть какая -то подсказка, чтобы помочь мне
Я сейчас работаю над алгоритмом, который разделяет список целых чисел, но я не могу понять, как это сделать. У меня есть список целых чисел, которые мне придется разделить на 3 списка, и сумма всех этих списков должна быть максимально аналогичной. Я начал с демонстрационного проекта с этим списком: < /p> [code]List numbers = new List { 1, 2, 3, 4, 5 }; < /code> В этом случае результат должен быть: < /p> list1 = {1,4}; list2 = {3,2}; list3 = {5}; < /code> И вот мой код: < /p> public static List ProvideLists(List originalList) { List result = new List { new List(), new List(), new List() }; var listToParse = originalList; while (listToParse.Count > 0) { var smalestList = result.Aggregate((a, b) => a.Sum() < b.Sum() ? a : b); var biggestList = result.Aggregate((a, b) => a.Sum() > b.Sum() ? a : b); var diffSmallBig = biggestList.Sum() - smalestList.Sum(); var closestNumber = listToParse.OrderBy(x => Math.Abs(x - diffSmallBig)).First(); listToParse.Remove(closestNumber); smalestList.Add(closestNumber); } return result; } < /code> В настоящее время этот код возвращает: < /p> list1 = {3}; list2 = {5,2}; list3 = {4,1}; [/code] Если у кого -то есть какая -то подсказка, чтобы помочь мне :)