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

コインの最小数を見つけるための欲張りアルゴリズムのためのC/C++プログラム


欲張りアルゴリズムは、与えられた問題の最適な解決策を見つけるために使用されるアルゴリズムです。欲張りアルゴリズムは、各部分の局所的に最適な解(問題の一部に対する最適な解)を見つけることによって機能するため、グローバルな最適解が見つかる可能性があることを示します。

この問題では、欲張りアルゴリズムを使用して、指定された合計を構成できるコイン/ノートの最小数を見つけます。 このために、すべての有効な硬貨または紙幣、つまり{1、2、5、10、20、50、100、200、500、2000}の金種を考慮します。そして、合計を補うために必要なこれらのコイン/ノートの数を返す必要があります。

コンテキストをよりよく理解するために、いくつかの例を見てみましょう-

例1-

Input : 1231
Output : 7

説明 − Rs 500紙幣2枚、Rs 100紙幣2枚、Rs 20紙幣1枚、Rs 10紙幣1枚、Re1コイン1枚が必要です。合計すると2+2 + 1 + 1 + 1 =7

例2-

Input : 2150
Output : 3

説明-2000ルピー紙幣1枚、100ルピー紙幣1枚、50ルピー紙幣1枚が必要です。

欲張りアルゴリズムを使用してこの問題を解決するために、使用できる最大の金種であるを見つけます。次に、合計から最大の金額を引き、合計がゼロになるまで同じプロセスを繰り返します。

アルゴリズム

Input: sum,
Initialise the coins = 0
Step 1: Find the largest denomination that can be used i.e. smaller than sum.
Step 2: Add denomination two coins and subtract it from the Sum
Step 3: Repeat step 2 until the sum becomes 0.
Step 4: Print each value in coins.

#include <bits/stdc++.h>
using namespace std;
int notes[] = { 1, 2, 5, 10, 20, 50, 100, 200, 500, 2000 };
int n = sizeof(notes) / sizeof(notes[0]);
void minchange(int sum){
   vector<int> coins;
   for (int i = n - 1; i >= 0; i--) {
      while (sum >= notes[i]) {
         sum -= notes[i];
         coins.push_back(notes[i]);
      }
   }
   for (int i = 0; i < coins.size(); i++)
      cout << coins[i] << "\t";
}
int main(){
   int n = 3253;
   cout << "The minimum number of coins/notes that sum up " << n << " is \t ";
   minchange(n);
   return 0;
}

出力

The minimum number of coins/notes that sum up 3253 is
2000 500 500 200 50 2 1

  1. 数の奇数因子の合計を見つけるためのC++プログラム

    正の整数で与えられ、タスクは、数値の奇数因子を生成し、与えられた奇数因子の合計を見つけることです。 例 Input-: number = 20 Output-: sum of odd factors is: 6 Input-: number = 18 Output-: sum of odd factors is: 13 したがって、結果=1 + 5 =6 以下のプログラムで使用されるアプローチは次のとおりです − その数の奇数因子の合計を計算するための数を入力します 数字0と2は両方とも偶数であるため無視し、数字1は奇数であるため保存します ループを3から数値の平方根まで開始し

  2. 数の因子の最小合計を見つけるためのPythonプログラム

    この記事では、以下に示す問題ステートメントの解決策について学習します- 問題の説明 入力された数値を指定して、指定された数値の因子の最小合計を求めます。 ここでは、すべての因子とそれに対応する合計を計算し、それらの中から最小値を見つけます。 したがって、数の積の最小合計を見つけるために、積の素因数の合計を見つけます。 これが問題の反復実装です- 例 #iterative approach def findMinSum(num):    sum_ = 0    # Find factors of number and add to the sum