Skip to content
Related Articles

Related Articles

Maximum litres of water that can be bought with N Rupees

Improve Article
Save Article
  • Difficulty Level : Hard
  • Last Updated : 29 Sep, 2022
Improve Article
Save Article

Given N    Rupees. A liter plastic bottle of water costs A    Rupees and a litre of glass bottle of water costs B    Rupees. But the empty glass bottle after buying can be exchanged for C    Rupees. Find the maximum liters of water which can be bought with N    Rupees.

Examples: 

Input: N = 10 , A = 11 , B = 9 , C = 8 
Output:
One glass bottle can be bought and then can be returned to buy one more glass bottle

Input: N = 15 , A = 6 , B = 4 , C = 3 
Output: 12 

Approach: If we have at least b    money then cost of one glass bottle is b – c. This means that if a ≤ (b – c) then we don’t need to buy glass bottles, only plastic ones, and the answer will be floor(n / a). Otherwise we need to buy glass bottles while we can. 

So, if we have at least b    money, then we will buy floor((n – c) / (b – c)) glass bottles and then spend rest of the money on plastic ones.

Below is the implementation of the above approach: 

C++




// CPP implementation of the above approach
#include<bits/stdc++.h>
using namespace std;
 
 
void maxLitres(int budget,int plastic,int glass,int refund)
{
 
    // if buying glass bottles is profitable
    if (glass - refund < plastic)
       {
           // Glass bottles that can be bought
        int ans = max((budget - refund) / (glass - refund), 0);
 
        // Change budget according the bought bottles
        budget -= ans * (glass - refund);
 
        // Plastic bottles that can be bought
        ans += budget / plastic;
        cout<<ans<<endl;
       }
 
    // if only plastic bottles need to be bought
    else
        cout<<(budget / plastic)<<endl;
}
 
     
 
// Driver Code
int main()
{
    int budget = 10, plastic=11, glass=9, refund =  8;
    maxLitres(budget, plastic, glass, refund);
}
 
// This code is contributed by
// Surendra_Gangwar

Java




// Java implementation of the above approach
class GFG
{
 
    static void maxLitres(int budget, int plastic,
                            int glass, int refund)
    {
 
        // if buying glass bottles is profitable
        if (glass - refund < plastic)
        {
             
            // Glass bottles that can be bought
            int ans = Math.max((budget - refund) / (glass - refund), 0);
 
            // Change budget according the bought bottles
            budget -= ans * (glass - refund);
 
            // Plastic bottles that can be bought
            ans += budget / plastic;
            System.out.println(ans);
        }
         
        // if only plastic bottles need to be bought
        else
        {
            System.out.println((budget / plastic));
        }
 
    }
 
    // Driver Code
    public static void main(String[] args)
    {
        int budget = 10, plastic = 11, glass = 9, refund = 8;
        maxLitres(budget, plastic, glass, refund);
    }
}
 
/* This code contributed by PrinciRaj1992 */

Python3




# Python3 implementation of the above approach
 
def maxLitres(budget, plastic, glass, refund):
 
    # if buying glass bottles is profitable
    if glass - refund < plastic:
 
        # Glass bottles that can be bought
        ans = max((budget - refund) // (glass - refund), 0)
 
        # Change budget according the bought bottles
        budget -= ans * (glass - refund)
 
        # Plastic bottles that can be bought
        ans += budget // plastic
        print(ans)
 
    # if only plastic bottles need to be bought
    else:
        print(budget // plastic)
 
# Driver Code
budget, plastic, glass, refund = 10, 11, 9, 8
maxLitres(budget, plastic, glass, refund)

C#




// C# implementation of the above approach
using System;   
 
class GFG
{
 
    static void maxLitres(int budget, int plastic,
                            int glass, int refund)
    {
 
        // if buying glass bottles is profitable
        if (glass - refund < plastic)
        {
             
            // Glass bottles that can be bought
            int ans = Math.Max((budget - refund) / (glass - refund), 0);
 
            // Change budget according the bought bottles
            budget -= ans * (glass - refund);
 
            // Plastic bottles that can be bought
            ans += budget / plastic;
            Console.WriteLine(ans);
        }
         
        // if only plastic bottles need to be bought
        else
        {
            Console.WriteLine((budget / plastic));
        }
 
    }
 
    // Driver Code
    public static void Main(String[] args)
    {
        int budget = 10, plastic = 11, glass = 9, refund = 8;
        maxLitres(budget, plastic, glass, refund);
    }
}
 
// This code contributed by Rajput-Ji

PHP




<?php
// PHP implementation of the above approach
 
function maxLitres($budget, $plastic,
                   $glass, $refund)
{
 
    // if buying glass bottles is profitable
    if ($glass - $refund < $plastic)
    {
        // Glass bottles that can be bought
        $ans = max((int)($budget - $refund) /
                        ($glass - $refund), 0);
 
        // Change budget according the bought bottles
        $budget -= $ans * ($glass - $refund);
 
        // Plastic bottles that can be bought
        $ans += (int)($budget / $plastic);
        echo $ans . "\n";
    }
 
    // if only plastic bottles need to be bought
    else
        echo (int)($budget / $plastic) . "\n";
}
 
// Driver Code
$budget = 10;
$plastic = 11;
$glass = 9;
$refund = 8;
maxLitres($budget, $plastic,
          $glass, $refund);
 
// This code is contributed by mits
?>

Javascript




<script>
 
// Javascript implementation of the above approach
 
    function maxLitres(budget, plastic,
                            glass, refund)
    {
   
        // if buying glass bottles is profitable
        if (glass - refund < plastic)
        {
               
            // Glass bottles that can be bought
            let ans = Math.max((budget - refund) / (glass - refund), 0);
   
            // Change budget according the bought bottles
            budget -= ans * (glass - refund);
   
            // Plastic bottles that can be bought
            ans += Math.floor(budget / plastic);
            document.write(ans);
        }
           
        // if only plastic bottles need to be bought
        else
        {
            document.write(Math.floor(budget / plastic));
        }
   
    }
     
    // Driver code
 
    let budget = 10, plastic = 11, glass = 9, refund = 8;
    maxLitres(budget, plastic, glass, refund);
       
</script>

Output

2

Time complexity: O(1)
Auxiliary space: O(1)


My Personal Notes arrow_drop_up
Related Articles

Start Your Coding Journey Now!