Given an integer N, the task is to find the minimum count of {1, 2, 5}-valued coins such that changes of all possible values in the range [1, N] can be formed and it is not possible to obtain values N.
Examples:
Input: N = 8
Output:
Count of 5 values coins: 0
Count of 2 rupees coins: 3
Count of 1 rupees coins: 2
Explanation:
Coins required for 1 cent = 1
Coins required for 2 cent = 1
Coins required for 3 cent = 2
Coins required for 4 cent = 2
Coins required for 5 cent = 3
Coins required for 6 cent = 3
Coins required for 7 cent = 4
Coins required for 8 cent = 5Input: N = 17
Output:
Count of 5 rupees coins: 2
Count of 2 rupees coins: 3
Count of 1 rupees coins: 1
Approach: The problem can be solved using the greedy technique. The idea is based on the following observations:
Any number, X from the range [1, N] can be represented as
X = 5 * (Integer) + Y * (Integer)
Y is one of the values from the range [0, 4]
Follow the steps below to solve the problem:
- Initialize three variables, say F, T, and O, to store the count of 5 , 2 and 1-valued coins.
- Calculate count of 5-valued coins using F = (N – 4)/5.
- If (N – 5 * F) is even, then count of one valued coins can be calculated as O = 1.
- Otherwise, count of one valued coins can be calculated as O = 2.
- Calculate count of two valued coins can be calculated as T = (N – 5 * F – O) / 2.
- Finally, print values of F, T, and O.
Below is the implementation of the above approach:,
#include <bits/stdc++.h> using namespace std;
// Function to find minimum count of {1, 2, 5} // valued coins required to make a change of // all values in the range [1, N] void find( int N)
{ int T, F, O;
// Number of 5 valued coins required
F = int ((N - 4) / 5);
// Number of 1 valued coins required
if (((N - 5 * F) % 2) == 0)
{
O = 2;
}
else
{
O = 1 ;
}
// Number of 2 valued coins required
T = floor ((N - 5 * F - O)/2);
cout<< "Count of 5 valued coins: " << F << endl;
cout<< "Count of 2 valued coins: " << T<< endl;
cout<< "Count of 1 valued coins: " << O << endl;
} // Driver Code int main()
{ int N = 8;
find(N);
return 0;
} // This code is contributed by Jana_sayantan. |
// Java program to implement // the above approach import java.util.*;
class GFG{
// Function to find minimum count of {1, 2, 5} // valued coins required to make a change of // all values in the range [1, N] static void find( int N)
{ int T, F, O;
// Number of 5 valued coins required
F = ( int )((N - 4 ) / 5 );
// Number of 1 valued coins required
if (((N - 5 * F) % 2 ) == 0 )
{
O = 2 ;
}
else
{
O = 1 ;
}
// Number of 2 valued coins required
T = ( int )Math.floor((N - 5 * F - O)/ 2 );
System.out.println( "Count of 5 valued coins: " + F);
System.out.println( "Count of 2 valued coins: " + T);
System.out.println( "Count of 1 valued coins: " + O);
} // Driver Code public static void main(String args[])
{ int N = 8 ;
find(N);
} } // This code is contributed by splevel62. |
# Python Program for the above approach # Function to find minimum count of {1, 2, 5} # valued coins required to make a change of # all values in the range [1, N] def find(N):
# Number of 5 valued coins required
F = int ((N - 4 ) / 5 )
# Number of 1 valued coins required
if ((N - 5 * F) % 2 ) = = 0 :
O = 2
else :
O = 1
# Number of 2 valued coins required
T = (N - 5 * F - O) / / 2
print ( "Count of 5 valued coins: " , F)
print ( "Count of 2 valued coins: " , T)
print ( "Count of 1 valued coins: " , O)
if __name__ = = '__main__' :
N = 8
find(N)
|
// C# program to implement // the above approach using System;
public class GFG
{ // Function to find minimum count of {1, 2, 5} // valued coins required to make a change of // all values in the range [1, N] static void find( int N)
{ int T, F, O;
// Number of 5 valued coins required
F = ( int )((N - 4) / 5);
// Number of 1 valued coins required
if (((N - 5 * F) % 2) == 0)
{
O = 2;
}
else
{
O = 1 ;
}
// Number of 2 valued coins required
T = ( int )Math.Floor(( double )(N - 5 * F - O)/2);
Console.WriteLine( "Count of 5 valued coins: " + F);
Console.WriteLine( "Count of 2 valued coins: " + T);
Console.WriteLine( "Count of 1 valued coins: " + O);
} // Driver Code public static void Main(String []args)
{ int N = 8;
find(N);
} } // This code is contributed by 29AjayKumar |
<script> // Javascript program to implement // the above approach // Function to find minimum count of {1, 2, 5} // valued coins required to make a change of // all values in the range [1, N] function find(N)
{ var T, F, O;
// Number of 5 valued coins required
F = parseInt((N - 4) / 5);
// Number of 1 valued coins required
if (((N - 5 * F) % 2) == 0)
{
O = 2;
}
else
{
O = 1 ;
}
// Number of 2 valued coins required
T = Math.floor((N - 5 * F - O)/2);
document.write( "Count of 5 valued coins: " + F + "<br>" );
document.write( "Count of 2 valued coins: " + T + "<br>" );
document.write( "Count of 1 valued coins: " + O + "<br>" );
} var N = 8;
find(N); // This code is contributed by SoumikMondal. </script> |
Count of 5 valued coins: 0 Count of 2 valued coins: 3 Count of 1 valued coins: 2
Time Complexity: O(1)
Auxiliary Space: O(1)