我正在尝试将数字平均分配到给定大小的数组中。如果我有一个数字10和一个数组大小为3,那么我应该将它分配到一个数组中,如下所示:
x = [4, 3, 3]
稍后如果我想将数字增加1,那么我应该从数组中取出(最小的)最小数字,然后一个接一个地更新它们。
x = [4, 4, 3]
稍后如果我想将数字增加2,那么我应该更新数组如下:
x = [5, 4, 4]
更新:
我能够完成第一部分
def split_into n, p
[n / p + 1] * (n % p) + [n / p] * (p - n % p)
end
split_into(10, 3) #=> [4, 3, 3]
答案 0 :(得分:3)
一种简单的方法,重复查找并递增最小数字:
var htmlReporter = new ExtentHtmlReporter(ResourcesConfig.ReportPath);
extent = new ExtentReports();
extent.AttachReporter(htmlReporter);
htmlReporter.LoadConfig(ResourcesConfig.ReportXMLPath);
**htmlReporter.AppendExisting = true;**
演示:
n.times { x[x.index(x.min)] += 1 }
另一种简单的方法,重复使用现有方法,如果n很大则更快:
x = [0, 0, 0]
n = 10
n.times { x[x.index(x.min)] += 1 }
x #=> [4, 3, 3]
n = 4
n.times { x[x.index(x.min)] += 1 }
x #=> [5, 5, 4]
答案 1 :(得分:1)
如果您尝试将某些内容拆分为偶数组,请使用Rails'in_groups_of
:
(1..10).to_a.in_groups_of(3) #=> [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, nil, nil]]
您还可以通过提供false
的第二个参数来指定不填充结尾。
如果您真的想知道群组的大小,可以使用in_groups
(略微不同于in_groups_of
)来获取群组:
(1..10).to_a.in_groups(3, false).map(&:size) #=> [4, 3, 3]
答案 2 :(得分:0)
您可以通过divmod计算商数和余数:
q, r = 10.divmod(3)
#=> [3, 1]
通过Array.new
创建相应的数组:
Array.new(3) { |i| i < r ? q + 1 : q }
#=> [4, 3, 3]
作为一种方法:
def split_into(n, p)
q, r = n.divmod(p)
Array.new(p) { |i| i < r ? q + 1 : q }
end
a = split_into(10, 3)
#=> [4, 3, 3]
To&#34;增加&#34;数组1
,您可以将1
添加到数组&#39; sum
并再次致电split_into
:
a = split_into(a.sum + 1, a.size)
#=> [4, 4, 3]
2
:
a = split_into(a.sum + 2, a.size)
#=> [5, 4, 4]