Cho 2 két sắt L1 (A coins) và L2 (B coins). Mỗi lần rút tiền từ két nào, két đó sẽ được nạp lại với số coins ít hơn 1. Chỉ được rút 2 lần. Tối đa hóa số tiền rút được.
Ví dụ
Đầu vào - L1 = 10, L2 = 11
Đầu ra - Tiền tối đa: 21
Giải thích - Bước 1: Rút 11 từ L2 → L2 còn 10. Bước 2: Cả 2 đều 10 → rút thêm 10. Tổng = 21.
Đầu vào - L1 = 5, L2 = 5
Đầu ra - Tiền tối đa: 10
Giải thích - Bước 1: Rút 5 từ L1 → L1 còn 4. Bước 2: Rút 5 từ L2. Tổng = 10.
Phương pháp
- Hàm
maxMoney(int A, int B) - Lần 1: rút từ két nhiều hơn (money = max(A,B))
- Giảm két đó đi 1
- Lần 2: lại rút từ két nhiều hơn (money += max(A,B))
- Trả về money
Chương trình mẫu
#include <stdio.h>
int maxMoney(int A, int B) {
int money = (A > B) ? A : B;
if (money == A)
A--;
else
B--;
money += (A > B) ? A : B;
return money;
}
int main() {
int L1 = 8, L2 = 9;
printf("Tiền tối đa rút 2 bước: %d", maxMoney(L1, L2));
return 0;
}
Kết quả
Tiền tối đa rút 2 bước: 17
Giải thích: 9 + 8 = 17