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

本文关键字:最接近 高数 | 更新日期: 2023-09-27 18:06:50

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

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

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

这里有一些极简主义代码,以更好地理解:

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

在本例中,minimumToGet应具有比customerMinimum更高的值,但必须在没有余数的情况下除以containerQty1containerQty2

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

给定两个数字MD,可以在M之上构造最小的数字X,使D除以X,方法是先将D加到M,然后减去总和除以D的余数,即

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

示例:M = 200D = 13。我们正在寻找一个最小的倍数13以上200。

int X = (200+13) - ((200+13) % 13) = 213 - 5 = 208;

将客户最小值除以两个容器后,找到剩余值。添加最小的(不含容器的剩余部分(。

例如,客户最小值=20,q1=7,q2=11。

20+(7-20%7(=21

20+(11-20%11(=22。

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

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));
}