Open In App

Find out the minimum number of coins required to pay total amount

Improve
Improve
Improve
Like Article
Like
Save Article
Save
Share
Report issue
Report

Given a total amount of N and unlimited number of coins worth 1,  10 and 25 currency coins. Find out the minimum number of coins you need to use to pay exactly amount N.
Examples: 

Input : N = 14
Output : 5
You will use one coin of value 10 and
four coins of value 1.
Input : N = 88
Output : 7

Approach:

To solve this problem we will use recursion to try all possible combinations of coins and return the minimum count of coins required to make the given amount. We can start with the largest coin, i.e., 25, and then try all possible combinations of 25, 10, and 1 coins.

Let countCoins(n) be the minimum number of coins required to make the amount n. Then, countCoins(n) can be computed as follows:

countCoins(n) = min(countCoins(n-25), countCoins(n-10), countCoins(n-1)) + 1

The base cases are countCoins(0) = 0 (no coins required to make 0) and countCoins(n) = INT_MAX for n < 0 (no solution for negative amounts).

  1. Check if the amount n is 0. If yes, then no coins are required, so return 0.
  2. Check if the amount n is negative. If yes, then no solution exists, so return INT_MAX.
  3. If n is positive, then try all possible combinations of coins by making recursive calls for n-25, n-10, and n-1. Store the counts of coins returned by these recursive calls in count1, count2, and count3 respectively.
  4. Return the minimum of count1, count2, and count3 plus 1, as one coin will be required for the current value of n.

Below is the implementation of the above approach:

C++




// C++ program to find the minimum number
// of coins required
 
#include <bits/stdc++.h>
using namespace std;
 
// Function to find the minimum number
// of coins required
int countCoins(int n)
{
    if (n == 0) {
        return 0;
    }
    if (n < 0) {
        return INT_MAX;
    }
 
    int count1 = countCoins(n-25);
    int count2 = countCoins(n-10);
    int count3 = countCoins(n-1);
 
    return min(count1, min(count2, count3)) + 1;
}
 
// Driver Code
int main()
{
    int n = 14;
 
    cout << countCoins(n);
 
    return 0;
}


Java




public class MinimumCoins {
    // Function to find the minimum number of coins required
    public static int countCoins(int n) {
        if (n == 0) {
            return 0;
        }
        if (n < 0) {
            return Integer.MAX_VALUE;
        }
 
        int count1 = countCoins(n - 25);
        int count2 = countCoins(n - 10);
        int count3 = countCoins(n - 1);
 
        return Math.min(count1, Math.min(count2, count3)) + 1;
    }
 
    // Driver Code
    public static void main(String[] args) {
        int n = 14;
 
        System.out.println(countCoins(n));
    }
}


Python3




# Function to find the minimum number of coins required
def countCoins(n):
    # Base case: If n is 0, no coins are required
    if n == 0:
        return 0
    # Base case: If n becomes negative, return a large value to indicate impossibility
    if n < 0:
        return float("inf")
 
    # Recursive calls for different coin denominations
    count1 = countCoins(n - 25# Using a coin of value 25
    count2 = countCoins(n - 10# Using a coin of value 10
    count3 = countCoins(n - 1)   # Using a coin of value 1
 
    # Choose the minimum count from the three options and add 1 for the current coin
    return min(count1, count2, count3) + 1
 
# Driver Code
n = 14
print(countCoins(n))


C#




using System;
 
class Program
{
    // Function to find the minimum number
    // of coins required
    static int CountCoins(int n)
    {
        if (n == 0)
        {
            return 0;
        }
        if (n < 0)
        {
            return int.MaxValue;
        }
 
        int count1 = CountCoins(n - 25);
        int count2 = CountCoins(n - 10);
        int count3 = CountCoins(n - 1);
 
        return Math.Min(count1, Math.Min(count2, count3)) + 1;
    }
 
    // Driver Code
    static void Main()
    {
        int n = 14;
 
        Console.WriteLine(CountCoins(n));
    }
}


Javascript




// Function to find the minimum number of coins required
function countCoins(n) {
    // Base case: If n is 0, no coins are required
    if (n === 0) {
        return 0;
    }
    // Base case: If n becomes negative, return a large value to indicate impossibility
    if (n < 0) {
        return Number.MAX_SAFE_INTEGER;
    }
 
    // Recursive calls for different coin denominations
    const count1 = countCoins(n - 25); // Using a coin of value 25
    const count2 = countCoins(n - 10); // Using a coin of value 10
    const count3 = countCoins(n - 1);  // Using a coin of value 1
 
    // Choose the minimum count from the three options and add 1 for the current coin
    return Math.min(count1, count2, count3) + 1;
}
 
// Driver Code
const n = 14;
console.log(countCoins(n));


Output

5






Time Complexity: O(3^n), where n is the amount.
Space Complexity: O(n), where n is the amount, due to the recursion depth.

Approach: 
There are three different cases: 
 

  1. If value of N < 10, then coins that have value 1 can only be used for payment.
  2. When N > 9 and < 25, then coins that have value 1 and 10 will be used for payment. Here, to minimize the number of coins used, coins with value 10 will be preferred mostly. 
     
  3. When N > 24. Then all coins of value 1, 10 and 25 will be used for payment. To minimize the number of coins, the primary aim will be to use coin with value 25 first as much as possible then coin with value 10 and then with value 1.

Below is the implementation of the above approach:
 

C++




// C++ program to find the minimum number
// of coins required
 
#include <iostream>
using namespace std;
 
// Function to find the minimum number
// of coins required
int countCoins(int n)
{
    int c = 0;
 
    if (n < 10) {
        // counts coins which have value 1
        // we will need n coins of value 1
        return n;
    }
    if (n > 9 && n < 25) {
        // counts coins which have value 1 and 10
        c = n / 10 + n % 10;
        return c;
    }
    if (n > 24) {
        // counts coins which have value 25
        c = n / 25;
 
        if (n % 25 < 10) {
 
            // counts coins which have value 1 and 25
            c = c + n % 25;
            return c;
        }
 
        if (n % 25 > 9) {
            // counts coins which have value 1, 10 and 25
            c = c + (n % 25) / 10 + (n % 25) % 10;
            return c;
        }
    }
}
 
// Driver Code
int main()
{
    int n = 14;
 
    cout << countCoins(n);
 
    return 0;
}


Java




// Java program to find the minimum number
// of coins required
 
class GFG {
 
    // Function to find the minimum number
    // of coins required
    static int countCoins(int n)
    {
        int c = 0;
        if (n < 10) {
            // counts coins which have value 1
            // we will need n coins of value 1
            return n;
        }
        if (n > 9 && n < 25) {
 
            // counts coins which have value 1 and 10
            c = n / 10 + n % 10;
 
            return c;
        }
        if (n > 24) {
            // counts coins which have value 25
            c = n / 25;
 
            if (n % 25 < 10) {
                // counts coins which have value 1 and 25
                c = c + n % 25;
 
                return c;
            }
            if (n % 25 > 9) {
                // counts coins which have value 1, 10 and 25
                c = c + (n % 25) / 10 + (n % 25) % 10;
 
                return c;
            }
        }
 
        return c;
    }
 
    // Driver Code
    public static void main(String[] args)
    {
        int n = 14;
        System.out.println(countCoins(n));
    }
}


Python3




# Python3 program to find the minimum number
# of coins required
 
# Function to find the minimum number
# of coins required
def countCoins(n):
 
    c = 0
 
    if (n < 10):
         
        # counts coins which have value 1
        # we will need n coins of value 1
        return n
     
    if (n > 9 and n < 25):
         
        # counts coins which have value 1 and 10
        c = n // 10 + n % 10
        return c
 
    if (n > 24):
         
        # counts coins which have value 25
        c = n // 25
 
        if (n % 25 < 10):
 
            # counts coins which have value
            # 1 and 25
            c = c + n % 25
            return c
 
        if (n % 25 > 9):
             
            # counts coins which have value
            # 1, 10 and 25
            c = (c + (n % 25) // 10 +
                     (n % 25) % 10)
            return c
 
# Driver Code
n = 14
 
print(countCoins(n))
 
# This code is contributed by mohit kumar


C#




// C# program to find the minimum number
// of coins required
using System;
 
class GFG
{
 
    // Function to find the minimum number
    // of coins required
    static int countCoins(int n)
    {
        int c = 0;
        if (n < 10)
        {
            // counts coins which have value 1
            // we will need n coins of value 1
            return n;
        }
        if (n > 9 && n < 25)
        {
 
            // counts coins which have value 1 and 10
            c = n / 10 + n % 10;
 
            return c;
        }
        if (n > 24)
        {
            // counts coins which have value 25
            c = n / 25;
 
            if (n % 25 < 10)
            {
                // counts coins which have value 1 and 25
                c = c + n % 25;
 
                return c;
            }
            if (n % 25 > 9)
            {
                // counts coins which have value 1, 10 and 25
                c = c + (n % 25) / 10 + (n % 25) % 10;
 
                return c;
            }
        }
 
        return c;
    }
 
    // Driver Code
    public static void Main()
    {
        int n = 14;
        Console.WriteLine(countCoins(n));
    }
}
 
// This code is contributed by Ryuga


Javascript




<script>
 
// JavaScript program to find the minimum number
// of coins required
 
// Function to find the minimum number
// of coins required
function countCoins( n)
{
    var c = 0;
 
    if (n < 10)
    {
     
        // counts coins which have value 1
        // we will need n coins of value 1
        return n;
    }
    if (n > 9 && n < 25)
    {
     
        // counts coins which have value 1 and 10
        c = n / 10 + n % 10;
        return Math.trunc(c);
    }
    if (n > 24)
    {
     
        // counts coins which have value 25
        c = n / 25;
        if (n % 25 < 10)
        {
 
            // counts coins which have value 1 and 25
            c = c + n % 25;
            return Math.trunc(c);
        }
 
        if (n % 25 > 9)
        {
         
            // counts coins which have value 1, 10 and 25
            c = c + (n % 25) / 10 + (n % 25) % 10;
            return Math.trunc(c);
        }
    }
}
 
var n = 14;
document.write(countCoins(n));
 
// This code is contributed by akshitsaxenaa09.
</script>


PHP




<?php
// PHP program to find the minimum number
// of coins required
 
// Function to find the minimum number
// of coins required
function countCoins($n)
{
    $c = 0;
    if ($n < 10)
    {
        // counts coins which have value 1
        // we will need n coins of value 1
        return $n;
    }
     
    if ($n > 9 && $n < 25)
    {
 
        // counts coins which have value 1 and 10
        $c = (int)($n / 10 + $n % 10);
 
        return $c;
    }
     
    if ($n > 24)
    {
        // counts coins which have value 25
        $c = (int)($n / 25);
 
        if ($n % 25 < 10)
        {
             
            // counts coins which have value 1 and 25
            $c = $c + $n % 25;
 
            return $c;
        }
        if ($n % 25 > 9)
        {
            // counts coins which have value 1, 10 and 25
            $c = $c + ($n % 25) / 10 + ($n % 25) % 10;
 
            return $c;
        }
    }
 
    return $c;
}
 
// Driver Code
$n = 14;
echo(countCoins($n));
 
// This code is contributed Code_Mech


Output

5






Time Complexity : O(1)
Auxiliary Space : O(1)



Last Updated : 29 Oct, 2023
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads