假设我有一袋 N 软糖,我想将它们尽可能均匀地分配给 P 人。我想要一个数组,显示每个人得到的软糖的数量。
例如,我有23个软糖在5个人中分配。该数组应类似于[5, 5, 5, 4, 4]
我想这更多是一个数学问题,但是我正在寻找JavaScript解决方案。
答案 0 :(得分:0)
一个有趣的简单(低效)解决方案,类似于小型人通常解决此问题的方式。
var P=5
var Nbeans=23
var people=new Array(P).fill(0);
for (var beans=0; beans < Nbeans;beans++){
people[beans % P]++
}
console.log(people)
或更有效;
P=5
Nbeans=23
people=new Array(P).fill(Math.floor(Nbeans/P));
var beansLeft=Nbeans%P;
for (var luckyOnes=0; luckyOnes < beansLeft;luckyOnes++){
people[luckyOnes]++
}
console.log(people)
最后,如果您想真正提高效率,并确保只对每个数组元素寻址一次,则可以使用类型化数组子数组方法。
var N=5;
var Nbeans=23;
var people=new Uint32Array(N);
var numLucky=Nbeans%N;
people.subarray(0,numLucky).fill(Math.ceil(Nbeans/N));
people.subarray(numLucky,people.length).fill(Math.floor(Nbeans/N));
console.log(people);