У меня есть определенное количество ящиков в определенном порядке и несколько весов в определенном порядке. Весы могут иметь разные веса (например, вес может составлять 1 кг, еще 2 кг и т. Д.). Я хочу поместить весы в ящики таким образом, чтобы они были равномерно распределены как возможный вес. Я должен брать веса в том порядке, в котором они даны, и я должен заполнить коробки в том порядке, в котором они указаны. То есть, если я поместил вес в поле n + 1, я не могу поместить вес в поле n, и я не могу поместить вес m + 1 в коробку, пока я не поместил вес m в коробку.Четкая и отсортированная проблема распространения
Мне нужно найти алгоритм, который решает эту проблему для любого количества ящиков и любого набора весов.
Несколько тестов в C# с XUnit (Распределить это метод, который должен решить проблему):
[Fact]
public void ReturnsCorrectNumberOfBoxes()
{
int[] populatedColumns = Distribute(new int[0], 4);
Assert.Equal<int>(4, populatedColumns.Length);
}
[Fact]
public void Test1()
{
int[] weights = new int[] { 1, 1, 1, 1 };
int[] boxes = Distribute(weights, 4);
Assert.Equal<int>(weights[0], boxes[0]);
Assert.Equal<int>(weights[1], boxes[1]);
Assert.Equal<int>(weights[2], boxes[2]);
Assert.Equal<int>(weights[3], boxes[3]);
}
[Fact]
public void Test2()
{
int[] weights = new int[] { 1, 1, 17, 1, 1 };
int[] boxes = Distribute(weights, 4);
Assert.Equal<int>(2, boxes[0]);
Assert.Equal<int>(17, boxes[1]);
Assert.Equal<int>(1, boxes[2]);
Assert.Equal<int>(1, boxes[3]);
}
[Fact]
public void Test3()
{
int[] weights = new int[] { 5, 4, 6, 1, 5 };
int[] boxes = Distribute(weights, 4);
Assert.Equal<int>(5, boxes[0]);
Assert.Equal<int>(4, boxes[1]);
Assert.Equal<int>(6, boxes[2]);
Assert.Equal<int>(6, boxes[3]);
}
Любая помощь очень ценится!
Спасибо! Я посмотрю! –