新手问题 平均分配问题

bluexuemei · 2014年12月21日 · 最后由 bluexuemei 回复于 2014年12月21日 · 2706 次阅读

把一个任意整数平均分成若干份问题,比分说 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 ,不错,简单易懂,谢谢

#1 楼 @blacktulip ,不错,简单易懂,谢谢

[x + 1] * (y % x) + [x] * (y / x - y % x)

#1 楼 @blacktulip 有内建的 divmod 方法可以用:

def average_allocate(total, division)
  div, modulo = total.divmod division
  [div + 1] * modulo + [div] * (division - modulo)
end

#5 楼 @quakewang 噢,谢谢,写的时候我就在想会不会有现成的方法... 果然是有的

#5 楼 @quakewang [div + 1] * modulo + [div] * (division - modulo) 吧?

#7 楼 @luikore 嗯,没有在 irb 里面验证,随手写一定就会出错啊啊啊

我记得有原生的方法能做到啊

哦,你是这个意思啊。。。弄错

需要 登录 后方可回复, 如果你还没有账号请 注册新账号