কম্পিউটার টিউটোরিয়াল

দেওয়া মান তৈরির জন্য ন্যূনতম সিক্কা (Minimum Number of Coins)

একটি সিক্কার তালিকা C(c1, c2, ... Cn) এবং একটি মান V দেওয়া আছে। এখন সমস্যা হল ন্যূনতম কতগুলো সিক্কা ব্যবহার করে মান V তৈরি করা যায়।

নোট: ধরে নেওয়া হল সিক্কা C-এর অসীম সংখ্যা রয়েছে।

এই সমস্যায় আমরা বিবেচনা করব সিক্কার একটি সেট C{1, 2, 5, 10} দেওয়া আছে। প্রতিটি টাইপের অসীম সিক্কা আছে। অনুরোধকৃত মান পরিবর্তন করতে আমরা যেকোনো টাইপের ন্যূনতম সিক্কা নিতে চাইব। উদাহরণস্বরূপ, ২২ এর জন্য: {10, 10, 2} বেছে নেব, অর্থাৎ ৩টি সিক্কা ন্যূনতম।

ইনপুট এবং আউটপুট

ইনপুট: প্রয়োজনীয় মান। ধরা যাক ৪৮
আউটপুট: ন্যূনতম প্রয়োজনীয় সিক্কা। এখানে আউটপুট ৭।
48 = 10 + 10 + 10 + 10 + 5 + 2 + 1

অ্যালগরিদম

minCoins(coinList, n, value)

ইনপুট: বিভিন্ন সিক্কার তালিকা, সিক্কা সংখ্যা, দেওয়া মান।
আউটপুট: দেওয়া মান পाने کے জন্য ন্যূনতম সিক্কা সংখ্যা।

শুরু
  যদি value = 0 হয়, তবে
    ফেরত দিন 0
  value+1 আকারের coins অ্যারে সংজ্ঞায়িত করুন, ∞ দিয়ে পূরণ করুন
  coins[0] := 0
  i := 1 থেকে value পর্যন্ত, করুন
    j := 0 থেকে n পর্যন্ত, করুন
      যদি coinList[j] <= i হয়, তবে
        tempCoins := coins[i - coinList[j]]
        যদি tempCoins ≠ ∞ এবং (tempCoins + 1) < coins[i] হয়, তবে
          coins[i] := tempCoins + 1
    끝난
  끝난
  coins[value] ফেরত দিন
শেষ

উদাহরণ (C++)

#include <iostream>
using namespace std;

int minCoins(int coinList[], int n, int value) {
  int coins[value+1];
  if(value == 0) return 0;
  coins[0] = 0;
  for (int i=1; i<=value; i++)
    coins[i] = INT_MAX;
  for (int i=1; i<=value; i++) {
    for (int j=0; j> value;
  cout << "Minimum " << minCoins(coins, n, value) << " coins required.";
  return 0;
}

আউটপুট

Enter Value: 48
Minimum 7 coins required.
  1. C++ ব্যবহার করে দুটি স্ট্রিং সমান করার ন্যূনতম অপারেশন সংখ্যা

  2. C++ ব্যবহার করে N কে ২৫ দিয়ে বিভাজ্য করার ন্যূনতম মুভ সংখ্যা

  3. C++ ব্যবহার করে অ্যারে 'ভালো' করার জন্য ন্যূনতম এলিমেন্ট অপসারণ

  4. C++ ব্যবহার করে স্ট্রিংকে প্যালিনড্রোম করার ন্যূনতম ডিলিশন সংখ্যা