สมมติว่ามีขวดน้ำเต็มจำนวน n ขวด เราสามารถแลกเปลี่ยนขวดน้ำเปล่า m เป็นขวดน้ำเต็มได้เพียงขวดเดียว ตอนนี้ดื่มน้ำเต็มขวดทำให้เป็นขวดเปล่า เราต้องหาขวดน้ำให้ได้มากที่สุด
ดังนั้นหากอินพุตเป็น n =9, m =3 ผลลัพธ์จะเป็น 13 เพราะในตอนแรกเรามี 9 ขวด ดังนั้นหลังจากดื่มทุกขวดแล้วเราจะได้ 9/3 =3 ขวดเต็มหลังจากดื่มจนหมด มีขวดเปล่าสามขวดแล้วเอามาใช้ก็ซื้อไปดื่มได้ เราจึงทำครบ 9 + 3 + 1 =13 ขวด
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
x:=n, s:=0, k:=0
-
ในขณะที่ x>=m ทำ
-
k:=x mod m
-
x:=ผลหารของ x / m
-
s:=s + x
-
x:=x + k
-
-
คืนค่า n + s
ตัวอย่าง (Python)
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
def solve(n, m): x=n s=0 k=0 while x >= m: k=x % m x=x // m s=s + x x=x + k return n + s n = 9 m = 3 print(solve(n, m))
อินพุต
9, 3
ผลลัพธ์
13