# Check if given coins can be used to pay a value of S

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

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`

## Python3

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

## Javascript

 ``

Output:
`YES`

Time Complexity: O(A)

Auxiliary Space: O(1)

Previous
Next