Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม

ปัญหาการเปลี่ยนเหรียญขั้นต่ำ


มีรายการเหรียญ 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