把一个任意整数平均分成若干份问题,比分说 9 分成 3 分,结果是 [3,3,3],10 分成 3 份,结果为 [3,3,4] 或者 [4,3,3] 或者 [3,4,3] 怎么设计算法才简洁?
def average_allocate(total, division)
remaining = total % division
result = []
(1..division).each do |i|
i <= remaining ? result << total / division + 1 : result << total / division
end
result
end
#1 楼 @blacktulip 有内建的 divmod 方法可以用:
def average_allocate(total, division)
div, modulo = total.divmod division
[div + 1] * modulo + [div] * (division - modulo)
end