保和除法
Division that preserve the sum
我需要一个函数 f,它有两个整数参数——一个被除数 A 和一个除数 B -- 和 returns 整数商数组 C1, C2, ..., Cn 例如 C1 + C2 + ... + Cn = A 和 A 和 B 的提示是 "equally distributed".
例如:
- f (9, 3) = [3, 3, 3]
- f (10, 3) = [4, 3, 3]
- f (11, 3) = [4, 4, 3] (而不仅仅是 [5, 3, 3])
我不想重新发明轮子,请问哪里有这样的功能?
假设函数为f(x,y)
,并且每个变量都是正值整数,示例算法为:
x除以y,余数存为r,商存为q。
for( i=1; i<=r; i++ )
element[i] = q + 1;
// assuming the array index starts from 1.
就是这样。您已将元素存储在 element[]
数组中。
高度怀疑是否存在。然而,一个可以很容易地实现。您可以使用 B
获取所述数组中的元素数量,并在 A % B
上方获取 1 的数量
这是一个贪心算法。对于任何除数 Y
,余数最多为 Y - 1
。所以将余数 1 贪婪地分配给每个商。不可能每人分配1后还有余数,或者一个商会得到多于1。
f(X, Y):
q = X / Y
r = X % Y
while r not equal to 0
print q + 1
r := r - 1
Y := Y - 1
end
while Y not equal 0
print q
Y := Y - 1
end
end
如果 X
和 Y
都是非负数且 Y > 0
,这将起作用。如果 Y
大于 X
,它仍然会处理这个。
我需要一个函数 f,它有两个整数参数——一个被除数 A 和一个除数 B -- 和 returns 整数商数组 C1, C2, ..., Cn 例如 C1 + C2 + ... + Cn = A 和 A 和 B 的提示是 "equally distributed".
例如:
- f (9, 3) = [3, 3, 3]
- f (10, 3) = [4, 3, 3]
- f (11, 3) = [4, 4, 3] (而不仅仅是 [5, 3, 3])
我不想重新发明轮子,请问哪里有这样的功能?
假设函数为f(x,y)
,并且每个变量都是正值整数,示例算法为:
x除以y,余数存为r,商存为q。
for( i=1; i<=r; i++ )
element[i] = q + 1;
// assuming the array index starts from 1.
就是这样。您已将元素存储在 element[]
数组中。
高度怀疑是否存在。然而,一个可以很容易地实现。您可以使用 B
获取所述数组中的元素数量,并在 A % B
这是一个贪心算法。对于任何除数 Y
,余数最多为 Y - 1
。所以将余数 1 贪婪地分配给每个商。不可能每人分配1后还有余数,或者一个商会得到多于1。
f(X, Y):
q = X / Y
r = X % Y
while r not equal to 0
print q + 1
r := r - 1
Y := Y - 1
end
while Y not equal 0
print q
Y := Y - 1
end
end
如果 X
和 Y
都是非负数且 Y > 0
,这将起作用。如果 Y
大于 X
,它仍然会处理这个。