Related Articles
Check if given coins can be used to pay a value of S
• Last Updated : 08 Apr, 2020

Given A coins of value N and B coins of value M, the task is to check if given coins can be used to pay a value of S.
Examples:

Input: A = 1, B = 2, N = 3, S = 4, M = 1
Output: YES
Explanation:
In this case if 1 coin of value 3 is chosen and 2 coins of value 1, then it is possible to pay a value of S.

Input: A = 1, B = 2, N = 3, S = 6, M = 1
Output: NO
In this case, It is not possible to pay a value of S

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

Approach:
The idea is to use greedy approach.

• Keep subtracting coins with value N from the required sum S.
• At each step, while subtracting coins of value N, check if the remaining sum is a multiple of coins with value M and we have sufficient coins of value M to get this remaining sum.
• If at any step, the above two conditions are satisfied, return YES.

Below is the implementation of the above approach:

## C++

 `// C++ implementation to check``// if it is possible to pay a value`` ` `#include ``using` `namespace` `std;`` ` `// Function to check if it``// is possible to pay a value``void` `knowPair(``int` `a, ``int` `b, ``        ``int` `n, ``int` `s, ``int` `m){``     ` `    ``int` `i = 0, rem = 0;``    ``int` `count_b = 0, flag = 0;`` ` `    ``// Loop to add the value of coin A``    ``while` `(i <= a) {``        ``rem = s - (n * i);``        ``count_b = rem / m;``        ``if` `(rem % m == 0 && count_b <= b){``            ``flag = 1;``        ``}``        ``i++;``    ``}``     ` `    ``// Condition to check if it is``    ``// possible to pay a value of S``    ``if` `(flag == 1) {``        ``cout << ``"YES"` `<< endl;``    ``}``else``{``        ``cout << ``"NO"` `<< endl;``    ``}``}`` ` `// Driver Code``int` `main()``{``    ``int` `A = 1;``    ``int` `B = 2;``    ``int` `n = 3;``    ``int` `S = 4;``    ``int` `m = 2;`` ` `    ``knowPair(A, B, n, S, m);`` ` `    ``return` `0;``}`

## Java

 `// Java implementation to check``// if it is possible to pay a value``class` `GFG{``  ` `// Function to check if it``// is possible to pay a value``static` `void` `knowPair(``int` `a, ``int` `b, ``        ``int` `n, ``int` `s, ``int` `m){``      ` `    ``int` `i = ``0``, rem = ``0``;``    ``int` `count_b = ``0``, flag = ``0``;``  ` `    ``// Loop to add the value of coin A``    ``while` `(i <= a) {``        ``rem = s - (n * i);``        ``count_b = rem / m;``        ``if` `(rem % m == ``0` `&& count_b <= b){``            ``flag = ``1``;``        ``}``        ``i++;``    ``}``      ` `    ``// Condition to check if it is``    ``// possible to pay a value of S``    ``if` `(flag == ``1``) {``        ``System.out.print(``"YES"` `+``"\n"``);``    ``}``else``{``        ``System.out.print(``"NO"` `+``"\n"``);``    ``}``}``  ` `// Driver Code``public` `static` `void` `main(String[] args)``{``    ``int` `A = ``1``;``    ``int` `B = ``2``;``    ``int` `n = ``3``;``    ``int` `S = ``4``;``    ``int` `m = ``2``;``  ` `    ``knowPair(A, B, n, S, m);``}``}`` ` `// This code is contributed by 29AjayKumar`

## Python 3

 `# Python 3 implementation to check``# if it is possible to pay a value`` ` `# Function to check if it``# is possible to pay a value``def` `knowPair(a,b,n,s,m):``    ``i ``=` `0``    ``rem ``=` `0``    ``count_b ``=` `0``    ``flag ``=` `0`` ` `    ``# Loop to add the value of coin A``    ``while` `(i <``=` `a):``        ``rem ``=` `s ``-` `(n ``*` `i)``        ``count_b ``=` `rem ``/``/` `m``        ``if` `(rem ``%` `m ``=``=` `0` `and` `count_b <``=` `b):``            ``flag ``=` `1``        ``i ``+``=` `1``     ` `    ``# Condition to check if it is``    ``# possible to pay a value of S``    ``if` `(flag ``=``=` `1``):``        ``print``(``"YES"``)``    ``else``:``        ``print``(``"NO"``)`` ` `# Driver Code``if` `__name__ ``=``=` `'__main__'``:``    ``A ``=` `1``    ``B ``=` `2``    ``n ``=` `3``    ``S ``=` `4``    ``m ``=` `2`` ` `    ``knowPair(A, B, n, S, m)``     ` `# This code is contributed by Surendra_Gangwar`

## C#

 `// C# implementation to check``// if it is possible to pay a value``using` `System;`` ` `class` `GFG{``   ` `// Function to check if it``// is possible to pay a value``static` `void` `knowPair(``int` `a, ``int` `b, ``        ``int` `n, ``int` `s, ``int` `m){``       ` `    ``int` `i = 0, rem = 0;``    ``int` `count_b = 0, flag = 0;``   ` `    ``// Loop to add the value of coin A``    ``while` `(i <= a) {``        ``rem = s - (n * i);``        ``count_b = rem / m;``        ``if` `(rem % m == 0 && count_b <= b){``            ``flag = 1;``        ``}``        ``i++;``    ``}``       ` `    ``// Condition to check if it is``    ``// possible to pay a value of S``    ``if` `(flag == 1) {``        ``Console.Write(``"YES"` `+ ``"\n"``);``    ``}``else``{``        ``Console.Write(``"NO"` `+ ``"\n"``);``    ``}``}``   ` `// Driver Code``public` `static` `void` `Main(String[] args)``{``    ``int` `A = 1;``    ``int` `B = 2;``    ``int` `n = 3;``    ``int` `S = 4;``    ``int` `m = 2;``   ` `    ``knowPair(A, B, n, S, m);``}``}`` ` `// This code is contributed by PrinciRaj1992`
Output:
```YES
```

Attention reader! Don’t stop learning now. Get hold of all the important mathematical concepts for competitive programming with the Essential Maths for CP Course at a student-friendly price. To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

My Personal Notes arrow_drop_up