J'ai un nombre donné de boîtes dans un ordre spécifique et un nombre de poids dans un ordre spécifique. Les poids peuvent avoir des poids différents (par exemple, un poids peut peser 1 kg, un autre 2 kg, etc.). Je veux mettre les poids dans les boîtes de manière à ce qu'ils soient aussi répartis que possible en poids. Je dois prendre les poids dans l'ordre où ils sont donnés et je dois remplir les cases dans l'ordre qui leur est donné. C'est à dire si je mets un poids dans la case n + 1 je ne peux pas mettre un poids dans la case n, et je ne peux pas mettre le poids m + 1 dans une case avant d'avoir mis le poids dans une case.Problème de distribution uniforme et trié
J'ai besoin de trouver un algorithme qui résout ce problème pour n'importe quel nombre de boîtes et n'importe quel ensemble de poids.
Quelques essais en C# avec xUnit (Distribuez est la méthode qui devrait résoudre le problème):
[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]);
}
Toute aide est grandement appréciée!
Merci! Je vais regarder dedans! –