找到具有给定除数的最接近的较高数字

时间:2015-08-07 19:28:18

标签: c# algorithm

我必须为顾客分配物品。在分配算法中,在分配剩余项目之前,所有客户都应该具有特定的最小值。

其中一些项目是预选的。对于这些预先挑选的物品,至少给出一个容器数量。有时两个。

我需要一种有效的算法来找到高于每位客户给定最小值的最小值,并且可以除以至少一个没有余数的容器数量。

这里有一些简化的代码可以更好地理解:

int  containerQty1;     
int? containerQty2;     // Can be null
int customerMinimum; 

int minimumToGet;

在此示例中,minimumToGet的值应高于customerMinimum,但必须按containerQty1containerQty2进行无分割。

3 个答案:

答案 0 :(得分:1)

在将客户最小值除以两个容器后找到剩余物。添加最小的(容器少剩余)。

例如,客户min = 20,q1 = 7,q2 = 11.

20 +(7 - 20%7)= 21

20 +(11 - 20%11)= 22.

所以在这种情况下,你要选择7容器和21。

答案 1 :(得分:1)

根据MD这两个数字,您可以构建X之上的最小数字M,以便DX除以首先将D添加到M,然后将总和的剩余部分减去D,即

int X = (M+D) - ((M+D) % D);

示例:M = 200D = 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));
}
相关问题