プログラミング
 Computer >> コンピューター >  >> プログラミング >> プログラミング

最小コイン交換問題


コインC(c1、c2、……Cn)のリストがあり、値Vも指定されています。ここで問題となるのは、チャンスをVにするために最小数のコインを使用することです。

注- コインの数が無限であると仮定しますC

この問題では、異なるコインのセットC {1、2、5、10}が与えられていると考えます。各タイプのコインは無限にあります。要求された値を変更するために、あらゆる種類のコインの最小数を取得しようとします。

例として、値22の場合、最小値として{10、10、2}、3コインを選択します。

このアルゴリズムの時間計算量idO(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

  1. C++の最大ヒープの最小要素。

    問題の説明 最大ヒープの値が最小の要素を見つけます。 最大ヒープ以下を考えてみましょう。 ルートノードの最大ヒープ値は、常にその子ノードよりも大きくなります。このプロパティにより、値はリーフノードの1つに存在すると結論付けることができます。ヒープにn個のノードが含まれている場合、ceil(n / 2)リーフがあります。 最大ヒープは完全なバイナリツリーであるため、配列で表すことができます。このようなヒープでは、最初のリーフはfloor(n / 2)インデックスの後に存在します。したがって、この例では、最初の休暇はインデックス5に存在します。 アルゴリズム 以下のアルゴリズムを使

  2. コイン交換のためのPythonプログラム

    この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 − N枚のコインが与えられ、Sに各値が無限に供給されるように、それらのコインを変更したいと考えています。順序に関係なく、変更できる方法がいくつあるかを表示する必要があります。 動的計画法の概念を使用して問題ステートメントを解決し、時間の複雑さを軽減します。 次に、以下の実装のソリューションを見てみましょう- 例 # dynamic approach def count(S, m, n):    # base case    table = [[0 for x in