ruby 代码转换帮助将数字分割成尽可能相等的部分

icomxhvb  于 2023-05-17  发布在  Ruby
关注(0)|答案(1)|浏览(77)

嗨,有人能向我解释一下如何将ruby中的代码转换为vb.net,因为我认为这是我需要的。我试着把一个数分成尽可能相等的几部分。
如果所有的部分不能相等,因为数字不能被彼此分开。32除以3。这样的结果应该给予11,11和10,这是尽可能相等的。
我在这里找到了一些代码,可以执行Split number into equal parts or what's closest to that

def split_into n, p
    [n/p + 1] * (n%p) + [n/p] * (p - n%p)
end

print (split_into 32, 3) # => [11, 11, 10]

所以现在我遇到了一个问题,我不明白Ruby中发生了什么,所以我无法转换它。
谢谢你的任何帮助提前。

nx7onnlm

nx7onnlm1#

我不明白在ruby中发生了什么,所以我无法转换它
我会试着解释发生了什么,这样你就可以转换它。
当使用Euclidean division将32除以3时,您有:

32 = 3 × 10 + 2

其中10是 * 商 *,2是 * 余数 *。
或者更一般地说:

a = d × q + r

为了得到3个“相等”的部分,你必须分配这2个:

32 = 11 + 11 + 10
   = 2 × 11 + 1 × 10
   = 2 × (10+1) + (3-2) × 10

或者更一般地说:

a = r × (q+1) + (d-r) × q

在Ruby中,这些部分可以表示为:

[11] * 2 + [10] * 1
#=> [11, 11, 10]

在上面,[11]是一个数组,*复制它的内容,即[11] * 2[11, 11]。同样的情况也发生在[10] * 1上,它就是[10]。最后,两个数组通过+连接,即[11, 11] + [10]返回[11, 11, 10]
或者更一般地说:

a = 32
d = 3
q = a / d #=> 10
r = a % d #=> 2

[q+1] * r + [q] * (d-r)
#=> [11, 11, 10]

将上面的与您的[n/p + 1] * (n%p) + [n/p] * (p - n%p)进行比较,您会看到它是等效的(napdn/pqn%pr)。
如果没有数组运算符,你可以使用两个循环来添加11和10:

parts = []

r.times { parts << q+1 }
(d-r).times { parts << q }

parts #=> [11, 11, 10]

相关问题