我必须为顾客分配物品。在分配算法中,在分配剩余项目之前,所有客户都应该具有特定的最小值。
其中一些项目是预选的。对于这些预先挑选的物品,至少给出一个容器数量。有时两个。
我需要一种有效的算法来找到高于每位客户给定最小值的最小值,并且可以除以至少一个没有余数的容器数量。
这里有一些简化的代码可以更好地理解:
int containerQty1;
int? containerQty2; // Can be null
int customerMinimum;
int minimumToGet;
在此示例中,minimumToGet
的值应高于customerMinimum
,但必须按containerQty1
或containerQty2
进行无分割。
答案 0 :(得分:1)
在将客户最小值除以两个容器后找到剩余物。添加最小的(容器少剩余)。
例如,客户min = 20,q1 = 7,q2 = 11.
20 +(7 - 20%7)= 21
20 +(11 - 20%11)= 22.
所以在这种情况下,你要选择7容器和21。
答案 1 :(得分:1)
根据M
和D
这两个数字,您可以构建X
之上的最小数字M
,以便D
将X
除以首先将D
添加到M
,然后将总和的剩余部分减去D
,即
int X = (M+D) - ((M+D) % D);
示例:M = 200
,D = 13
。我们正在寻找一个高于200的最小倍数。
int X = (200+13) - ((200+13) % 13) = 213 - 5 = 208;
答案 2 :(得分:1)
static int AmountToGet(int containerQty, int custMin) {
return custMin + containerQty - (custMin % containerQty);
}
现在有了:
var amountToGet = AmountToGet(containerQty1, minimumToGet);
if (containerQty2 != null) {
amountToGet = Math.Min(amountToGet, AmountToGet((int) containerQty2, minimumToGet));
}