我有一个数字数组,无法确定数组中的属性数量。
example:
array(30, 30, 10, 20, 60);
array(2, 53, 71, 22);
array(88, 22, 8);
etc...
现在通常,所有数组值的总和将为 100 或更少。
我想要做的是,当它们超过 100 时,将它们全部减少以使其等于 100。通常我只会将差值相除然后带走,但例如,第一个数组加起来为 150,如果我除差异(50)均匀,我最终会得到:
array(20, 20, 0, 10, 50);
但我希望根据它们的大小减去数字,所以 30 会取出比 10 更大的块。
我会这样做的方法是将每个值除以(total_sum / 100),并且效果很好。现在我需要做的是能够选择一个占主导地位且不能从中减去的值,然后减去所有其他值,直到总和为 100。示例如下:
array(20, 20, 80); // 80 is the dominant number
After normalising, the array would be:
array(10, 10, 80);
Example 2:
array(20, 20, 40, 60); // 40 is dominant number
after normalising:
array(10, 10, 40, 20) // maybe it wouldnt be those exact values bhut just to show how different size numbers get reduced according to size. But now total sum is 100
Example 3:
array(23, 43, 100, 32) // 100 is dominant
normalise
array(0, 0, 100, 0);
我尝试了很多东西,但似乎没有任何效果。我将如何做到这一点?
谢谢