มีขวดเบียร์เต็ม n ขวด สามารถแลกขวดเปล่า 3 ขวด ได้ 1 ขวดเต็ม หาจำนวนขวดทั้งหมดที่ดื่มได้
ตัวอย่าง: n = 10 → Output: 14
คำนวณ: ดื่ม 10 ขวด → เปล่า 10 ขวด → แลก 3 ขวด ได้ 3 ขวดเต็ม (เหลือเปล่า 1) → ดื่ม 3 → เปล่ารวม 4 → แลก 3 ได้ 1 (เหลือ 1) → ดื่ม 1 → เปล่ารวม 2 (ไม่พอแลก) → รวมดื่ม 10+3+1=14
วิธีแก้ปัญหา
- วนลูปเมื่อ
n >= 3 - คำนวณ
q = n / 3(จำนวนขวดเต็มที่แลกได้) - เพิ่ม
ret += q * 3(นับขวดที่ดื่มในรอบนี้) - อัปเดต
n = n - q*3 + q(ขวดเปล่าที่เหลือ + ขวดเต็มที่ได้มา) - หลังลูปเพิ่ม
ret += n(ดื่มขวดที่เหลือ)
ตัวอย่างโค้ด C++
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int solve(int n) {
int ret = 0;
while(n >= 3) {
int q = n / 3;
ret += q * 3;
n = n - q * 3 + q;
}
ret += n;
return ret;
}
};
int main() {
Solution ob;
cout << ob.solve(10);
}
Input
10
Output
14