Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

Beer Bottles in C++: คำนวณขวดเบียร์ที่ดื่มได้จากการแลกขวดเปล่า

มีขวดเบียร์เต็ม n ขวด สามารถแลกขวดเปล่า 3 ขวด ได้ 1 ขวดเต็ม หาจำนวนขวดทั้งหมดที่ดื่มได้

ตัวอย่าง: n = 10 → Output: 14

คำนวณ: ดื่ม 10 ขวด → เปล่า 10 ขวด → แลก 3 ขวด ได้ 3 ขวดเต็ม (เหลือเปล่า 1) → ดื่ม 3 → เปล่ารวม 4 → แลก 3 ได้ 1 (เหลือ 1) → ดื่ม 1 → เปล่ารวม 2 (ไม่พอแลก) → รวมดื่ม 10+3+1=14

วิธีแก้ปัญหา

  1. วนลูปเมื่อ n >= 3
  2. คำนวณ q = n / 3 (จำนวนขวดเต็มที่แลกได้)
  3. เพิ่ม ret += q * 3 (นับขวดที่ดื่มในรอบนี้)
  4. อัปเดต n = n - q*3 + q (ขวดเปล่าที่เหลือ + ขวดเต็มที่ได้มา)
  5. หลังลูปเพิ่ม 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