# 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

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

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

 ` `

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.