我在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
以来,这意味着:
EDIT2
按in order
,我的意思是:
A B C
---------
1 3 5
2 4
不
A B C
---------
1 2 3
4 5
答案 0 :(得分:3)
您可以在第一个(int)n/k
框中分配k-1
个球,在最后一个框中分配其余的球。这将是最简单的代码。
这样:boxCount += (i % (numOfBalls/numOfBoxes) == 0 && boxCount < numOfBoxes-1 ? 1 : 0)
答案 1 :(得分:3)
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
}
答案 2 :(得分:2)
int ball = 0;
for( int box = 0; box < x; ++box )
while ( x * (ball+1) <= y * (box+1) )
boxes.get(box).add(balls.get(ball++));
循环不变:左k
框包含球的分数k/x
(圆形)。
答案 3 :(得分:1)
好的,新尝试:
boxCount = ((i * nbrOfBoxes) / nbrOfBalls) + 1;
注意,球的索引编号从0到4(如for循环中所示)。如果您希望boxCount为零,请删除+ 1
。