Count the number of currency notes needed

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
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: 4



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++

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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));
    }
}

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?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
?>

chevron_right


Output:

3


My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.