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