Chúng ta được cho N rupee. Mục tiêu là mua nhiều nước nhất có thể với số tiền đó, nơi giá chai nước như sau:
- Chai nhựa: A Rupee cho 1 lít
- Chai thủy tinh: B Rupee cho 1 lít
- Chai thủy tinh: B Rupee cho 1 lít
Bây giờ chi phí thực tế của chai thủy tinh trở thành B - E rupee. Sau khi trả lại.
Nếu chi phí chai nhựa vẫn nhỏ hơn B - E, thì chỉ mua chai nhựa. Ngược lại mua (N - E) / (B - E) chai thủy tinh và dùng tiền còn lại mua chai nhựa.
Ví dụ
Đầu vào
N = 6, A = 5, B = 4, E = 3;
Đầu ra
Số lít nước tối đa: 3
Giải thích − B - E = 1, 1 < A. N - E = 3, với 3 rupee mua 3 chai thủy tinh 1 lít.
Đầu vào
N = 10, A = 5, B = 10, E = 3;
Đầu ra
Số lít nước tối đa: 2
Giải thích − B - E = 7, 7 > A. N / A = 10 / 5 = 2 chai nhựa có thể mua.
Phương pháp sử dụng trong chương trình dưới đây
- Số nguyên money, bottle, gbottle, gempty dùng cho giá và số tiền chúng ta có.
- Hàm maxWater(int mny, int pb, int gb, int ge) nhận tất cả giá trị làm tham số và in ra lượng nước có thể mua.
- Biến litrs lưu lượng nước tính được theo lít.
- Truyền pb làm giá trị mới của chai thủy tinh (giá gốc - giá trả lại).
- Nếu giá gb truyền vào nhỏ hơn pb, thì mua (mny - ge) / gb chai thủy tinh.
- Trừ số tiền này để tính tiền còn lại, mny -= ltrs * gb.
- Bây giờ chai nhựa có thể mua là mny / pb.
- Nếu giá pb truyền vào lớn hơn pb thì chỉ mua mny / pb chai nhựa.
- In kết quả trong cả hai trường hợp vì số chai chính là số lít nước. Mỗi chai dung tích 1 lít.
Ví dụ mã nguồn
// CPP implementation of the above approach
#include <bits/stdc++.h>
using namespace std;
void maxWater(int mny, int pb, int gb, int ge) {
int litrs;
// nếu mua chai thủy tinh có lợi
if (gb < pb) {
// số chai thủy tinh
int tmp = mny - ge / gb;
litrs = tmp > 0 ? tmp : 0;
mny -= litrs * gb;
// số chai nhựa
litrs += mny / pb;
cout << "Số lít nước tối đa: " << litrs << endl;
}
// chỉ chai nhựa
else
cout << "Số lít nước tối đa chỉ chai nhựa: " << (mny / pb) << endl;
}
int main() {
int money = 20, pbottle = 5, gbottle = 10, gempty = 8;
gbottle = gbottle - gempty; // chi phí mới chai thủy tinh
maxWater(money, pbottle, gbottle, gempty);
}
Kết quả
Số lít nước tối đa: 14