📜  查找总和等于给定金额的最小数量的纸币和值

📅  最后修改于: 2021-04-27 06:09:02             🧑  作者: Mango

给定数量,求出不同面额的纸币的最小数量总和等于给定的数量。从最高面额的钞票开始,尝试容纳给定数量的尽可能多的钞票。

我们可以假设我们有无限个面额{2000,500,200,100,50,20,10,5,1}的笔记

例子:

Input : 800
Output : Currency  Count 
         500 : 1
         200 : 1
         100 : 1

Input : 2456
Output : Currency  Count
         2000 : 1
         200 : 2
         50 : 1
         5 : 1
         1 : 1

这个问题是硬币找零问题的简单变化。在这种情况下,由于给定系统是规范的,因此贪婪方法有效(请参阅此内容,以了解详细信息)

以下是查找注释数量的程序实现:

C++
// C++ program to accept an amount
// and count number of notes
#include 
using namespace std;
  
// function to count and 
// print currency notes
void countCurrency(int amount)
{
    int notes[9] = { 2000, 500, 200, 100,
                     50, 20, 10, 5, 1 };
    int noteCounter[9] = { 0 };
      
    // count notes using Greedy approach
    for (int i = 0; i < 9; i++) {
        if (amount >= notes[i]) {
            noteCounter[i] = amount / notes[i];
            amount = amount - noteCounter[i] * notes[i];
        }
    }
      
    // Print notes
    cout << "Currency Count ->" << endl;
    for (int i = 0; i < 9; i++) {
        if (noteCounter[i] != 0) {
            cout << notes[i] << " : " 
                << noteCounter[i] << endl;
        }
    }
}
  
// Driver function
int main()
{
    int amount = 868;
    countCurrency(amount);
    return 0;
}


Python3
# Python3 program to accept an amount
# and count number of notes 
  
# Function to count and print 
# currency notes
def countCurrency(amount):
      
    notes = [2000, 500, 200, 100,
               50, 20, 10, 5, 1]
                 
    noteCounter = [0, 0, 0, 0, 0,
                     0, 0, 0, 0]
      
    print ("Currency Count -> ")
      
    for i, j in zip(notes, noteCounter):
        if amount >= i:
            j = amount // i
            amount = amount - j * i
            print (i ," : ", j)
  
# Driver code
amount = 868
countCurrency(amount)


Java
// Java program to accept an amount
// and count number of notes
import java.util.*;
import java.lang.*;
  
public class GfG{
  
    // function to count and 
    // print currency notes
    public static void countCurrency(int amount)
    {
        int[] notes = new int[]{ 2000, 500, 200, 100, 50, 20, 10, 5, 1 };
        int[] noteCounter = new int[9];
       
        // count notes using Greedy approach
        for (int i = 0; i < 9; i++) {
            if (amount >= notes[i]) {
                noteCounter[i] = amount / notes[i];
                amount = amount - noteCounter[i] * notes[i];
            }
        }
       
        // Print notes
        System.out.println("Currency Count ->");
        for (int i = 0; i < 9; i++) {
            if (noteCounter[i] != 0) {
                System.out.println(notes[i] + " : "
                    + noteCounter[i]);
            }
        }
    }
      
    // driver function 
    public static void main(String argc[]){
        int amount = 868;
        countCurrency(amount);
    }
      
    /* This code is contributed by Sagar Shukla */
}


C#
// C# program to accept an amount
// and count number of notes
using System;
  
public class GfG{
  
    // function to count and 
    // print currency notes
    public static void countCurrency(int amount)
    {
        int[] notes = new int[]{ 2000, 500, 200, 100, 50, 20, 10, 5, 1 };
        int[] noteCounter = new int[9];
      
        // count notes using Greedy approach
        for (int i = 0; i < 9; i++) {
            if (amount >= notes[i]) {
                noteCounter[i] = amount / notes[i];
                amount = amount - noteCounter[i] * notes[i];
            }
        }
      
        // Print notes
        Console.WriteLine("Currency Count ->");
        for (int i = 0; i < 9; i++) {
            if (noteCounter[i] != 0) {
                Console.WriteLine(notes[i] + " : "
                    + noteCounter[i]);
            }
        }
    }
      
    // Driver function 
    public static void Main(){
        int amount = 868;
        countCurrency(amount);
    }
      
  
}
  
/* This code is contributed by vt_m */


PHP
= $notes[$i])
        {
            $noteCounter[$i] = intval($amount / 
                                      $notes[$i]);
            $amount = $amount - 
                      $noteCounter[$i] * 
                      $notes[$i];
        }
    }     
    // Print notes
    echo ("Currency Count ->"."\n");
    for ($i = 0; $i < 9; $i++) 
    {
        if ($noteCounter[$i] != 0) 
        {
            echo ($notes[$i] . " : " .
                  $noteCounter[$i] . "\n");
        }
    }
}
  
// Driver Code
$amount = 868;
countCurrency($amount);
  
// This code is contributed by 
// Manish Shaw(manishshaw1)
?>


输出:

Currency  Count ->
500 : 1
200 : 1
100 : 1
50 : 1
10 : 1
5 : 1
1 : 3