Vì vậy, bạn đang thực sự sẽ phải tự xác định tất cả các breakpoint cho các hạng mục dưới một trật tự của 25. Sau đó, về cơ bản sử dụng một bảng tra cứu loại kịch bản để xác định những gì để đặt hàng cho qty nhỏ hơn 25. AS chỉ ra trước đây này là rất tương tự như vấn đề Knapsack.
Về cơ bản mã của bạn sẽ trông giống như;
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
Bạn có thể sử dụng một số thuật toán tham lam để xác định nó khi đang di chuyển. Đó sẽ là lý tưởng nếu giá được kỳ vọng sẽ thay đổi rất nhiều.
Điều đó có thể trông giống như điền kích thước gói với đối sánh chính xác và sau đó xác định kết quả trùng khớp gần nhất với số lượng còn lại và xem liệu nó có rẻ hơn không.
Vì vậy, ví dụ:
//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;
}
Mã này là không có nơi gần hoàn thành nhưng phải cung cấp cho bạn một ý tưởng. Mã cũng có lẽ không phải là vĩ đại nhất.
Sửa
Các đoạn thứ hai của mã sẽ đi sau khi đoạn đầu tiên ở vị trí của lookup
tôi chắc chắn rằng người bán sẽ cung cấp cho bạn giá thấp hơn nếu bạn đặt nhiều mục. Chỉ cần nói chuyện với anh ta thay vì mã hóa ;-) –
Bạn có sẵn sàng thương lượng cho tôi không? ;) – Jayoaichen