Open In App

Count the number of currency notes needed

Last Updated : 09 Jun, 2022
Improve
Improve
Like Article
Like
Save
Share
Report

You have an unlimited amount of banknotes worth A and B dollars (A not equals to B). You want to pay a total of S dollars using exactly N notes. The task is to find the number of notes worth A dollars you need. If there is no solution return -1.

Examples: 

Input: A = 1, B = 2, S = 7, N = 5 
Output:
3 * A + 2 * B = S 
3 * 1 + 2 * 2 = 7

Input: A = 2, B = 1, S = 7, N = 5 
Output: 2

Input: A = 2, B = 1, S = 4, N = 5 
Output: -1

Input: A = 2, B = 3, S = 20, N = 8 
Output:

Approach: Let x be the number of notes of value A required then the rest of the notes i.e. N – x must of value B. Since, their sum is required be S then the following equation must be satisfied:  

S = (A * x) + (B * (N – x)) 
Solving the equation further, 
S = (A * x) + (B * N) – (B * x) 
S – (B * N) = (A – B) * x 
x = (S – (B * N)) / (A – B) 
After solving for x, it is the number of notes of value A required 
only if the value of x is an integer else the result is not possible. 
 

Below is the implementation of the above approach: 

C++




// C++ implementation of the approach
#include<bits/stdc++.h>
using namespace std;
 
// Function to return the amount of notes
// with value A required
int bankNotes(int A, int B, int S, int N)
{
    int numerator = S - (B * N);
    int denominator = A - B;
 
    // If possible
    if (numerator % denominator == 0)
        return (numerator / denominator);
    return -1;
}
 
// Driver code
int main()
{
    int A = 1, B = 2, S = 7, N = 5;
    cout << bankNotes(A, B, S, N) << endl;
}
     
// This code is contributed by mits


Java




// Java implementation of the approach
class GFG {
 
    // Function to return the amount of notes
    // with value A required
    static int bankNotes(int A, int B, int S, int N)
    {
        int numerator = S - (B * N);
        int denominator = A - B;
 
        // If possible
        if (numerator % denominator == 0)
            return (numerator / denominator);
        return -1;
    }
 
    // Driver code
    public static void main(String[] args)
    {
        int A = 1, B = 2, S = 7, N = 5;
        System.out.print(bankNotes(A, B, S, N));
    }
}


Python3




# Python3 implementation of the approach
 
# Function to return the amount of notes
# with value A required
def bankNotes(A, B, S, N):
 
    numerator = S - (B * N)
    denominator = A - B
 
    # If possible
    if (numerator % denominator == 0):
        return (numerator // denominator)
    return -1
 
# Driver code
A, B, S, N = 1, 2, 7, 5
print(bankNotes(A, B, S, N))
 
# This code is contributed
# by mohit kumar


C#




// C# implementation of the approach
using System;
 
class GFG
{
 
    // Function to return the amount of notes
    // with value A required
    static int bankNotes(int A, int B,
                         int S, int N)
    {
        int numerator = S - (B * N);
        int denominator = A - B;
 
        // If possible
        if (numerator % denominator == 0)
            return (numerator / denominator);
        return -1;
    }
 
    // Driver code
    public static void Main()
    {
        int A = 1, B = 2, S = 7, N = 5;
        Console.Write(bankNotes(A, B, S, N));
    }
}
 
// This code is contributed by Akanksha Rai


PHP




<?php
// PHP implementation of the approach
 
// Function to return the amount of notes
// with value A required
function bankNotes($A, $B, $S, $N)
{
    $numerator = $S - ($B * $N);
    $denominator = $A - $B;
 
    // If possible
    if ($numerator % $denominator == 0)
        return ($numerator / $denominator);
    return -1;
}
 
// Driver code
$A = 1; $B= 2; $S = 7; $N = 5;
echo(bankNotes($A, $B, $S, $N));
 
// This code is contributed by Code_Mech
?>


Javascript




<script>
 
// Javascript implementation of the approach
 
// Function to return the amount of notes
// with value A required
function bankNotes(A, B, S, N)
{
    let numerator = S - (B * N);
    let denominator = A - B;
 
    // If possible
    if (numerator % denominator == 0)
        return (Math.floor(numerator /
                           denominator));
    return -1;
}
 
// Driver Code
let A = 1, B = 2, S = 7, N = 5;
 
document.write(bankNotes(A, B, S, N) + "</br>");
 
// This code is contributed by jana_sayantan
 
</script>


Output: 

3

 

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



Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads