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

จำนวนเหรียญขั้นต่ำที่สร้างมูลค่าที่กำหนด


มีรายการของเหรียญ C(c1, c2, ……Cn) และให้ค่า V ด้วย ตอนนี้ปัญหาคือการใช้จำนวนเหรียญขั้นต่ำเพื่อสร้างโอกาส V.

หมายเหตุ: สมมติว่ามีเหรียญจำนวนอนันต์ C.

ในปัญหานี้เราจะพิจารณาชุดของเหรียญที่แตกต่างกัน C{1, 2, 5, 10} มอบให้ มีเหรียญแต่ละประเภทไม่จำกัดจำนวน ในการเปลี่ยนแปลงมูลค่าที่ร้องขอ เราจะพยายามใช้จำนวนเหรียญขั้นต่ำทุกประเภท ตัวอย่างเช่น สำหรับค่า 22:เราจะเลือก {10, 10, 2}, 3 เหรียญเป็นขั้นต่ำ

อินพุตและเอาต์พุต

Input:
The required value. Say 48
Output:
Minimum required coins. Here the output is 7.
48 = 10 + 10 + 10 + 10 + 5 + 2 + 1

อัลกอริทึม

minCoins(coinList, n, value)

ป้อนข้อมูล: รายการเหรียญต่างๆ จำนวนเหรียญ มูลค่าที่กำหนด

ผลลัพธ์: จำนวนเหรียญขั้นต่ำที่จะได้รับมูลค่าที่กำหนด

Begin
   if value = 0, then
      return 0
   define coins array of size value + 1, fill with ∞
   coins[0] := 0

   for i := 1 to value, do
      for j := 0 to n, do
         if coinList[j] <= i, then
            tempCoins := coins[i-coinList[j]]
         if tempCoins ≠ ∞ and (tempCoins + 1) < coins[i], then
            coins[i] := tempCoins + 1
      done
   done

   return coins[value]
End

ตัวอย่าง

#include<iostream>
using namespace std;

int minCoins(int coinList[], int n, int value) {
   int coins[value+1];       //store minimum coins for value i

   if(value == 0)
      return 0;              //for value 0, it needs 0 coin

   coins[0] = 0;

   for (int i=1; i<=value; i++)
      coins[i] = INT_MAX;            //initially all values are infinity except 0 value

   for (int i=1; i<=value; i++) {      //for all values 1 to value, find minimum values
      for (int j=0; j<n; j++)
         if (coinList[j] <= i) {
            int tempCoins = coins[i-coinList[j]];
         if (tempCoins != INT_MAX && tempCoins + 1 < coins[i])
            coins[i] = tempCoins + 1;
      }
   }
   return coins[value];       //number of coins for value
}

int main() {
   int coins[] = {1, 2, 5, 10};
   int n = 4, value;
   cout << "Enter Value: "; cin >> value;
   cout << "Minimum "<<minCoins(coins, n, value)<<" coins required.";
   return 0;
}

ผลลัพธ์

Enter Value: 48
Minimum 7 coins required.