por lo que son en realidad va a tener que determinar manualmente todos los puntos de corte para artículos bajo una orden de 25. Entonces, básicamente, usar una tabla de búsqueda escriba escenario para determinar qué orden para qty es menor que 25. Como se señaló anteriormente, esto es muy similar al problema Knapsack.
Básicamente su código se parecería a algo así como;
int qtyOrder;
int qtyRemain;
int qty25pack;
int qty10pack;
int qty5pack;
int qty1pack;
//Grab as many 25 packs as possible
qty25pack = (qtyOrder % 25);
qtyRemain -= qty25Pack * 25;
//Here use your lookup table to determine what to order
// for the qty's that are less than 25
Puede usar algún tipo de algoritmo codicioso para determinarlo sobre la marcha. Lo cual sería ideal si se espera que los precios cambien mucho.
Podría parecer algo como llenar el tamaño del paquete con una coincidencia exacta y luego determinar la coincidencia más cercana que está justo por encima del resto restante y ver si es más barato.
Así, por ejemplo:
//find the perfect product amount price
While (qtyRemain != 0) {
perfectPrice += (qtyRemain % nextSmallestSize) * nextSmallestPackagePrice;
qtyRemain -= (qtyReamin % nextSmallestSize)
}
//Find the closest match over price
While ((qtyRemain % nextSmallestSize) != 0){
closePrice += (qtyRemain % nextSmallestSize) * nextSmallestPackagePrice;
qtyRemain -= (qtyRemain % nextSmallestSize)
}
//add the last price before we reached the perfect price size
closePrice += nextSmallestPackagePrice;
//determine lowest price
if closePrice < perfectPrice {
cost = closePrice;
}
else {
cost = PerfectPrice;
}
Este código no está cerca completa, pero debe darle una idea. El código tampoco es probablemente el mejor.
Editar
El segundo trozo de código iría después de que el primer fragmento en el lugar de las operaciones de búsqueda
Estoy seguro de que el vendedor le dará el precio más bajo si usted pide más artículos. Solo habla con él en lugar de codificar ;-) –
¿Estás dispuesto a negociar por mí? ;) – Jayoaichen