สมมติว่าเรามีตัวเลขสามจำนวน a, b และ c มีกองหินสามกอง a, b, c ลูกตามลำดับ ทุกครั้งสามารถทำได้:
- เอา 1 ลูกจากกองแรก และ 2 ลูกจากกองที่สอง (ถ้ามีพอ)
- เอา 1 ลูกจากกองที่สอง และ 2 ลูกจากกองที่สาม (ถ้ามีพอ)
ต้องนับว่าสูงสุดเก็บหินได้กี่ลูก
เช่น ถ้าอินพุตคือ a = 3; b = 4; c = 5 เอาต์พุตจะเป็น 9 เพราะ 2 รอบเอา 2 จากกองสอง 4 จากกองสาม รวม 6 แล้วเอา 1 จากกองหนึ่ง 2 จากกองสอง ได้อีก 3
ขั้นตอนการแก้ปัญหา
return (min(b, floor(c/2)) + min(a, (b - min(b, floor(c/2))) / 2)) * 3
ตัวอย่างโค้ด
#include <bits/stdc++.h>
using namespace std;
int solve(int a, int b, int c) {
return (min(b, c / 2) + min(a, (b - min(b, c / 2)) / 2)) * 3;
}
int main() {
int a = 3;
int b = 4;
int c = 5;
cout << solve(a, b, c) << endl;
}
อินพุต
3, 4, 5
เอาต์พุต
9