มีรายการเหรียญ C(c1, c2, ……Cn) ให้และมีค่า V ให้ด้วย ตอนนี้ปัญหาคือการใช้จำนวนเหรียญขั้นต่ำเพื่อสร้างโอกาส V.
หมายเหตุ - สมมติว่ามีเหรียญนับไม่ถ้วน C
ในปัญหานี้เราจะพิจารณาชุดของเหรียญที่แตกต่างกัน C{1, 2, 5, 10} มอบให้ มีเหรียญแต่ละประเภทเป็นอนันต์ ในการเปลี่ยนแปลงมูลค่าที่ร้องขอ เราจะพยายามใช้จำนวนเหรียญขั้นต่ำทุกประเภท
ตัวอย่างเช่น สำหรับค่า 22 – เราจะเลือกอย่างน้อย {10, 10, 2}, 3 เหรียญ
ความซับซ้อนของเวลาของอัลกอริทึมนี้ id O(V) โดยที่ V คือค่า
อินพุตและเอาต์พุต
Input: A value, say 47 Output: Enter value: 47 Coins are: 10, 10, 10, 10, 5, 2
อัลกอริทึม
findMinCoin(value)
อินพุต - ค่าที่จะทำการเปลี่ยนแปลง
ผลลัพธ์ − ชุดเหรียญ
Begin coins set with value {1, 2, 5, 10} for all coins i as higher value to lower value do while value >= coins[i] do value := value – coins[i] add coins[i], in thecoin list done done print all entries in the coin list. End
ตัวอย่าง
#include<iostream> #include<list> #define COINS 4 using namespace std; float coins[COINS] = {1, 2, 5, 10}; void findMinCoin(int cost) { list<int> coinList; for(int i = COINS-1; i>=0; i--) { while(cost >= coins[i]) { cost -= coins[i]; coinList.push_back(coins[i]); //add coin in the list } } list<int>::iterator it; for(it = coinList.begin(); it != coinList.end(); it++) { cout << *it << ", "; } } main() { int val; cout << "Enter value: "; cin >> val; cout << "Coins are: "; findMinCoin(val); cout << endl; }
ผลลัพธ์
Enter value: 47 Coins are: 10, 10, 10, 10, 5, 2