java - 如何将数组的每个元素加1直到最大值(事先已知)?

标签 java

我有一个表数组:

 int[] tables = new int[9]

我想让这个数组中的每个 int 都是一张 table 可以容纳的人数。 int[9] 所以总共 10 个表。

如果我最多有 98 名玩家,我希望数组包含:

tables[0] = 10
tables[1] = 10
tables[2] = 10
tables[3] = 10
tables[4] = 10
tables[5] = 10
tables[6] = 10
tables[7] = 10
tables[8] = 9
tables[9] = 9

现在 ^ 的总和是 98。

数组的值一开始都是0,要相加到和为98,98也可以不同,有时是97、96等。 谢谢。

最佳答案

这是一个简单的循环,根据剩余的人数将玩家数量分配到 table 上。由于您希望第一组表格的计数更高,因此您总是向上舍入。

示例:3 张 table ,8 名玩家
第一个表获得 8/3 = 3(向上舍入)
剩下 2 张 table ,5 名玩家
第二个表得到5/2 = 3(四舍五入)
剩下 1 张 table ,2 名玩家
第三张表得到 2/1 = 2
结果:[3,3,2]

代码:

private static int[] buildTables(int noOfTables, int noOfPlayers) {
    int[] tables = new int[noOfTables];
    for (int i = 0, playersLeft = noOfPlayers; i < noOfTables; playersLeft -= tables[i++]) {
        int tablesLeft = noOfTables - i;
        tables[i] = (playersLeft + tablesLeft - 1) / tablesLeft; // round up
    }
    return tables;
}

测试

System.out.println(Arrays.toString(buildTables(3, 8)));
System.out.println(Arrays.toString(buildTables(9, 5)));
System.out.println(Arrays.toString(buildTables(9, 98)));
System.out.println(Arrays.toString(buildTables(10, 98)));
System.out.println(Arrays.toString(buildTables(10, 96)));
System.out.println(Arrays.toString(buildTables(10, 88)));

输出

[3, 3, 2]
[1, 1, 1, 1, 1, 0, 0, 0, 0]
[11, 11, 11, 11, 11, 11, 11, 11, 10]
[10, 10, 10, 10, 10, 10, 10, 10, 9, 9]
[10, 10, 10, 10, 10, 10, 9, 9, 9, 9]
[9, 9, 9, 9, 9, 9, 9, 9, 8, 8]

如果您没有执行 +tablesLeft - 1 来导致向上舍入,结果将是:

[2, 3, 3]
[0, 0, 0, 0, 1, 1, 1, 1, 1]
[10, 11, 11, 11, 11, 11, 11, 11, 11]
[9, 9, 10, 10, 10, 10, 10, 10, 10, 10]
[9, 9, 9, 9, 10, 10, 10, 10, 10, 10]
[8, 8, 9, 9, 9, 9, 9, 9, 9, 9]

关于java - 如何将数组的每个元素加1直到最大值(事先已知)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37823944/

相关文章:

java - 如何以字符串形式将数字添加到数组?

java - 离开 fragment 后更新 ActionBar 标题

java - 我在使用 android studio 在 java 中设置 TextVIew 时遇到问题

java - 限制号Java中类的实例

java - Collections.synchronizedMap() 返回类转换异常,而法线贴图工作正常

java - 如何通过单击按钮来销毁框架?

java - 如何将 Eclipse 3.5 服务器导出到 Eclipse 3.6

java - 我如何知道我的应用程序是否在 Debug模式下在 weblogic 中运行?

java - 仅通过知道异或加密的字节数组和 key 大小来获取 key 字符串

java - 错误 : Cannot add task 'clean' as a task with that name already exists