java - 算法:将 y 个球放入 x 个盒子中,其中 x <= y

标签 java algorithm

我在 Android 上开发应用程序时遇到了一个问题。然而,问题是:

x盒子和y球在哪里x <= y ,我想分配球以将它们按顺序放入盒子中。例如:3个盒子; box A , box Bbox C - 和 5 个球; ball 1 , ball 2 , ball 3 , ball 4 , ball 5 .

我需要的是放第一个球ball 1里面box A , 和 ball 5里面box C其他球在他们之间分配(如果一个盒子比其他盒子有更多的球并不重要)。这是一个模拟问题的循环(缺少增量值):

int boxCount = 0; // first box is 0 and last box is x
int numOfBalls = y;
for(int i = 0; i < numOfBalls; i++, boxCount += ???)
{
    boxes.get(boxCount).add(balls.get(i));
}

我应该使用什么方程代替 ???解决问题?


编辑:

x <= y ,这意味着:

  • 所有方框都不应为空。
  • 盒子的球数之差不能超过1。

EDIT2

通过 in order ,我的意思是:

A   B   C
---------
1   3   5
2   4

不是

A   B   C
---------
1   2   3
4   5

最佳答案

int flag;
int lastBallAdded = 0;
int k = numOfBalls/numOfBoxes;
int m = numOfBalls%numOfBoxes;

for(int i = 0; i < numOfBoxes; i++, lastBallAdded+=k+flag) {
    flag = i<m;

    for(int j=lastBallAdded;j<lastBallAdded + k + flag;j++) 
        boxes.get(i).add(balls.get(j));
}

这是此解决方案背后的原因:

根据问题的定义,算法应将 k= numOfBalls/numOfBoxes 个球放在每个盒子中,第一个 m = numOfBalls%numOfBoxes 盒子除外,其中你应该放 k+1 个球。

你也可以写成

int i;
for(i = 0; i < m; i++) {
    //add k+1 balls
}

for(;i<numOfBoxes; i++) {
    //add k balls
}

关于java - 算法:将 y 个球放入 x 个盒子中,其中 x <= y,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10079106/

相关文章:

Java:通过引用集合克隆任意集合

javascript - 使用 JavaScript 的 Bliffoscope 数据分析解决方案

java - : org. glassfish.tyrus.spi.ClientContainer 引起的错误

java - wsdl Java 客户端上的 "cannot find symbol"

c++ - 从排序数组中删除重复项

algorithm - K 均值和文档聚类中的正确顺序输出

algorithm - QR 分解求解 CUDA 中的线性系统

algorithm - 在流网络的所有最小切割中找到最少的边缘

java - JFormattedTextfield.selectAll() 在格式化文本时不起作用

java - 谁能告诉我如何找到 mywebapp 内 '` images`' 文件夹的路径?