Find minimum number of currency notes and values that sum to given amount - GeeksforGeeks

13 May, 2022
Given an amount, find the minimum number of notes of different denominations that sum upto the given amount. Starting from the highest denomination note, try to accommodate as many notes possible for given amount.We may assume that we have infinite supply of notes of values {2000, 500, 200, 100, 50, 20, 10, 5, 1} Examples:  
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
 
This problem is a simple variation of coin change problem. Here Greedy approach works as given system is canonical (Please refer this and this for details)Below is the program implementation to find number of notes:  
C++
Python3
Java
C#
PHP
Javascript
// C++ program to accept an amount// and count number of notes#include <bits/stdc++.h>using namespace std; // function to count and// print currency notesvoid 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 functionint main(){    int amount = 868;    countCurrency(amount);    return 0;}
# Python3 program to accept an amount# and count number of notes # Function to count and print# currency notesdef 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 codeamount = 868countCurrency(amount)
// Java program to accept an amount// and count number of notesimport 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# program to accept an amount// and count number of notesusing 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// PHP program to accept an amount// and count number of notes // function to count and// print currency notesfunction countCurrency($amount){    $notes = array(2000, 500, 200, 100,                   50, 20, 10, 5, 1);    $noteCounter = array(0, 0, 0, 0, 0,                         0, 0, 0, 0, 0);         // count notes using    // Greedy approach    for ($i = 0; $i < 9; $i++)    {        if ($amount >= $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)?>
<script> // Javascript program to accept an amount// and count number of notes     // function to count and    // print currency notes    function countCurrency(amount)    {        let notes = [ 2000, 500, 200, 100, 50, 20, 10, 5, 1 ];        let noteCounter = Array(9).fill(0);                // count notes using Greedy approach        for (let i = 0; i < 9; i++) {            if (amount >= notes[i]) {                noteCounter[i] = Math.floor(amount / notes[i]);                amount = amount - noteCounter[i] * notes[i];            }        }                // Print notes       document.write("Currency Count ->" + "<br/>");        for (let i = 0; i < 9; i++) {            if (noteCounter[i] != 0) {                document.write(notes[i] + " : "                    + noteCounter[i] + "<br/>");            }        }    }      // driver code     let amount = 868;    countCurrency(amount);     </script>
Output:  
Currency  Count ->
500 : 1
200 : 1
100 : 1
50 : 1
10 : 1
5 : 1
1 : 3
 
manishshaw1
avijitmondal1998
khushboogoyal499
simmytarika5
Greedy
Greedy
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Program for Shortest Job First (or SJF) CPU Scheduling | Set 1 (Non- preemptive)
Job Sequencing Problem
Difference between Prim's and Kruskal's algorithm for MST
Dijkstra’s Algorithm for Adjacency List Representation | Greedy Algo-8
Program for Least Recently Used (LRU) Page Replacement algorithm
Shortest Remaining Time First (Preemptive SJF) Scheduling Algorithm
Graph Coloring | Set 2 (Greedy Algorithm)
Program for Page Replacement Algorithms | Set 2 (FIFO)
Greedy approach vs Dynamic programming
3 Different ways to print Fibonacci series in Java