เราได้รับ N บาท เป้าหมายคือซื้อน้ำมากที่สุด โดยราคาขวดน้ำมีดังนี้:
- ขวดพลาสติก: A บาท ต่อ 1 ลิตร
- ขวดแก้ว: B บาท ต่อ 1 ลิตร
- คืนขวดแก้วได้ E บาท (ดังนั้นต้นทุนจริงขวดแก้ว = B - E บาท)
ถ้าราคาพลาสติก (A) ยังถูกกว่า B-E ให้ซื้อแค่ขวดพลาสติก มิฉะนั้น ซื้อขวดแก้ว (N-E)/(B-E) ขวด และเงินคงเหลือซื้อขวดพลาสติก
อินพุต
N = 6, A = 5, B = 4, E = 3
เอาต์พุต
Maximum litres of water: 3
คำอธิบาย − B-E=1 < A, N-E=3 ซื้อขวดแก้ว 3 ขวด (3 ลิตร)
อินพุต
N = 10, A = 5, B = 10, E = 3
เอาต์พุต
Maximum litres of water: 2
คำอธิบาย − B-E=7 > A ซื้อขวดพลาสติก 10/5 = 2 ขวด
วิธีการที่ใช้ในโปรแกรมด้านล่าง
- ตัวแปร money, bottle, gbottle, gempty สำหรับราคาและเงิน
- ฟังก์ชัน maxWater(int mny, int pb, int gb, int ge) พิมพ์ปริมาณน้ำ
- litrs เก็บลิตรที่คำนวณได้
- ส่ง pb เป็นต้นทุนขวดแก้วใหม่ (ราคาเดิม - คืน)
- ถ้า gb < pb ซื้อขวดแก้ว (mny-ge)/gb ขวด ลบเงินที่ใช้ แล้วซื้อขวดพลาสติกเพิ่ม
- ถ้า pb <= gb ซื้อแค่ขวดพลาสติก mny/pb
- พิมพ์ผลลัพธ์ (1 ขวด = 1 ลิตร)
ตัวอย่างโค้ด
#include <bits/stdc++.h>
using namespace std;
void maxWater(int mny, int pb, int gb, int ge) {
int litrs;
if (gb < pb) {
int tmp = (mny - ge) / gb;
litrs = tmp > 0 ? tmp : 0;
mny -= litrs * gb;
litrs += mny / pb;
cout << "Maximum Liters of water: " << litrs << endl;
} else {
cout << "Maximum Liters of water only Plastic bottles: " << (mny / pb) << endl;
}
}
int main() {
int money = 20, pbottle = 5, gbottle = 10, gempty = 8;
gbottle = gbottle - gempty; // ต้นทุนขวดแก้วใหม่
maxWater(money, pbottle, gbottle, gempty);
return 0;
}
ผลลัพธ์
Maximum Liters of water: 14