嗨,有人能向我解释一下如何将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中发生了什么,所以我无法转换它。
谢谢你的任何帮助提前。
1条答案
按热度按时间nx7onnlm1#
我不明白在ruby中发生了什么,所以我无法转换它
我会试着解释发生了什么,这样你就可以转换它。
当使用Euclidean division将32除以3时,您有:
其中10是 * 商 *,2是 * 余数 *。
或者更一般地说:
为了得到3个“相等”的部分,你必须分配这2个:
或者更一般地说:
在Ruby中,这些部分可以表示为:
在上面,
[11]
是一个数组,*
复制它的内容,即[11] * 2
是[11, 11]
。同样的情况也发生在[10] * 1
上,它就是[10]
。最后,两个数组通过+
连接,即[11, 11] + [10]
返回[11, 11, 10]
。或者更一般地说:
将上面的与您的
[n/p + 1] * (n%p) + [n/p] * (p - n%p)
进行比较,您会看到它是等效的(n
是a
,p
是d
,n/p
是q
,n%p
是r
)。如果没有数组运算符,你可以使用两个循环来添加11和10: