Java 按比例减少一组数字以平衡总数

Java 按比例减少一组数字以平衡总数,java,math,Java,Math,在我的代码中,我有总共100个项目组。也就是说,每组中的项目总数为100个 现在,如果用户决定更改其中一个计数,我希望所有其他计数都进行缩放,以便它们彼此之间的比率仍然相同,但总计数仍然是100 如果我们从 [20, 30, 50] 你把50改成了75 那你就有了 [10, 15, 75] 所以我需要的是一个函数,它接受索引的参数和新值 并调整数组中的值以使其平衡 伪代码将是惊人的!Java更是如此 您可以简单地添加非用户更改编号的编号,获取它们与该编号的比率,并确保在尝试增加或减少编号时,

在我的代码中,我有总共100个项目组。也就是说,每组中的项目总数为100个

现在,如果用户决定更改其中一个计数,我希望所有其他计数都进行缩放,以便它们彼此之间的比率仍然相同,但总计数仍然是100

如果我们从

[20, 30, 50]
你把50改成了75 那你就有了

[10, 15, 75]
所以我需要的是一个函数,它接受索引的参数和新值 并调整数组中的值以使其平衡


伪代码将是惊人的!Java更是如此

您可以简单地添加非用户更改编号的编号,获取它们与该编号的比率,并确保在尝试增加或减少编号时,该比率不会改变

e、 g

  • 假设:a+b+c+d=100
  • 假设用户将deltaA添加到
然后

其他的也一样:

int newC = (int) (c * ((double)b + c + d - deltaA) / (b + c + d)) 
int newD = (int) (d * ((double)b + c + d - deltaA) / (b + c + d)) 

注意,这与Java无关,实际上与编程无关,但它只不过是最基本的代数。还要注意,由于四舍五入的挑战,此解决方案可能超过或低于100乘以1或2。您必须对此进行一些修改。

您打算如何处理舍入?[11,19,70]->[?,?,75]它不需要是完美的,所以我的目标是将它们都四舍五入到最接近的整数,然后从最大的数中加/减,以使结果相等。我认为这正是我所做的,但它似乎不起作用。在复制您所放置的内容并更改变量名称之后,它确实起了作用。使用星号的原因是,如果用户增加值,星号会起作用。然而,如果他们降低了价值,它不会,我正在努力理解为什么@user2036256:如果它们减小该值,则deltaA是一个负数,但等式完全不变。
int newC = (int) (c * ((double)b + c + d - deltaA) / (b + c + d)) 
int newD = (int) (d * ((double)b + c + d - deltaA) / (b + c + d))