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

时间:2013-02-17 03:13:32

标签: java math

在我的代码中,我有100个项目组,即每个组中的项目总数,所有组的总数为100个。

现在,如果用户决定更改其中一个计数,我希望其他所有计数都进行缩放,以使它们仍然保持相同的比例,但总计数仍为100。

即如果我们开始

[20, 30, 50]

你将50改为75 那么你最终会得到

[10, 15, 75]

所以我需要的是一个函数,它接受索引和新值的参数 并调整数组中的值以平衡它们。

伪代码会很棒! Java更是如此!

1 个答案:

答案 0 :(得分:0)

您可以简单地添加非用户更改号码的编号,获取他们与此编号的比率,并确保在尝试增加或减少数字时配给量不会改变。

e.g。

  • 说:a + b + c + d = 100
  • 并说用户将deltaA添加到a,

然后

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

和其他人一样:

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。你不得不对此做一点捏造。