miz*_*nix -3 ruby math ruby-on-rails
我有一个随机数,我想把它分成几个部分(加数),条件是一个部分不能超过20,部分必须尽可能彼此接近.
例如,如果我的随机数为41,则加数应为14,14,13.如果随机数为60,则加数应为20,20,20.如果随机数为21,则加数应为11和10,依此类推.
我的代码是在Ruby(Rails)中,所以我最欣赏一个答案,它在Ruby中提供了一个有效的实现,尽管也欢迎使用伪代码或其他编程语言.
这是我发现的数组,但我真的需要用数字来做这件事:" 将数组拆分成红宝石中的相等部分 "
Sly*_*erZ 13
你可以使用这种很酷的单线.它应该工作除以你想要的任何数量:
def split_into n, p
[n/p + 1] * (n%p) + [n/p] * (p - n%p)
end
print (split_into 32, 3) # => [11, 11, 10]
Run Code Online (Sandbox Code Playgroud)
它基本上将数字分成相等的部分,并将剩余部分除以前面的数字(每个为1).那和你可以相乘和添加数组的事实,如下:
[1] * 3 # => [1, 1, 1]
[1] + [2] # => [1, 2]
Run Code Online (Sandbox Code Playgroud)
编辑:考虑到每件作品应小于20的规则,您可以按照@Cary Swoveland的建议计算理想的件数:
p = (n / 20.0).ceil
Run Code Online (Sandbox Code Playgroud)