特定の順序で指定された数のボックスと特定の順序でいくつかのウェイトがあります。重りの重さは異なる場合があります(つまり、1つは1kg、もう1つは2kgなど)。ウェイトをできるだけ均等に分散するようにボックスに入れたいと思います。与えられた順序で重みを取り、与えられた順序でボックスに入力する必要があります。つまり、ボックスn + 1にウェイトを入れると、ボックスnにウェイトを入れることができず、最初にウェイトmをボックスに入れるまで、ウェイトm+1をボックスに入れることができません。
任意の数のボックスと任意の重みのセットに対してこの問題を解決するアルゴリズムを見つける必要があります。
xUnitを使用したC#でのいくつかのテスト(Distributeは問題を解決する方法です):
[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]);
}
どんな助けでも大歓迎です!