プログラミング
 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.

  1. C++を使用して配列を適切にするために削除する必要のある要素の最小数。

    問題の説明 配列「arr」が与えられた場合、タスクは、配列を適切にするために削除する要素の最小数を見つけることです。 シーケンスa1、a2、a3。 。 .anは、各要素a [i]に対して、a [i] + a [j]が2の累乗であるような要素a[j](iはjと等しくない)が存在する場合に適切と呼ばれます。 arr1[] = {1, 1, 7, 1, 5} 上記の配列で要素「5」を削除すると、配列は適切な配列になります。この後、arr [i] +arr[j]の任意のペアは2の累乗です- arr [0] + arr [1] =(1 + 1)=2この2の累乗 arr [0] + arr [

  2. C++で文字列回文を作成するための削除の最小数。

    問題の説明 サイズ「n」の文字列が与えられます。タスクは、文字列回文を作成するために最小数の文字を削除することです。 指定された文字列が「abcda」の場合、最初と最後を除く任意の2文字を削除して、回文にすることができます。 文字「b」と「c」を削除すると、「ada」文字列は回文になります 文字「c」と「d」を削除すると、「aba」文字列は回文になります 文字「b」と「d」を削除すると、「aca」文字列は回文になります アルゴリズム 1. Find longest palindromic subsequence of given string. Let’s