我在 Android 上开发应用程序时遇到了一个问题。然而,问题是:
有x
盒子和y
球在哪里x <= y
,我想分配球以将它们按顺序放入盒子中。例如:3个盒子; box A
, box B
和 box 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/