Skip to content
Related Articles

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

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 <bits/stdc++.h>
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
Recommended Articles
Page :