สมมติว่าเรามีตัวเลขสามตัว a, b และ c มีหินสามกองที่มี a, b และ cnumber ของหินตามลำดับ ทุกครั้งที่เราสามารถดำเนินการเหล่านี้ได้ -
-
นำหินหนึ่งก้อนจากกองแรกและสองก้อนจากกองที่สอง (เมื่อกองมีจำนวนหินที่จำเป็น)
-
นำหินหนึ่งก้อนจากกองที่สองและสองก้อนหินจากกองที่สาม (เมื่อกองหินมีจำนวนที่จำเป็น)
เราต้องนับหินให้ได้มากที่สุดกี่ก้อน?
ดังนั้นหากอินพุตเป็นเหมือน a =3; ข =4; c =5 จากนั้นผลลัพธ์จะเป็น 9 เพราะในการดำเนินการสองครั้ง เราสามารถนำหินสองก้อนจากกองที่สองและสี่ก้อนหินจากกองที่สาม รวมแล้วเรามี 6 หิน จากนั้นนำหนึ่งก้อนจากที่หนึ่งและสองจากที่สองเพื่อรับหินอีก 3 ก้อน
ขั้นตอน
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
return (minimum of b and floor of (c / 2) + minimum of a and (b - minimum of b and floor of (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