Maximize count of empty water bottles from N filled bottles

Given two integers N and E, where N represents the number of full water bottles and E represents the number of empty bottles that can be exchanged for a full water bottle. The task is to find the maximum number of water bottles that can be emptied.
Examples:
Input: N = 9, E = 3
Output: 13
Explanation:
Initially, there are 9 fully filled water bottles.
All of them are emptied to obtain 9 empty bottles. Therefore, count = 9
Then exchange 3 bottles at a time for 1 fully filled bottle.
Therefore, 3 fully filled bottles are obtained.
Then those 3 bottles are emptied to get 3 empty bottles. Therefore, count = 9 + 3 = 12
Then those 3 bottles are exchanged for 1 full bottle which is emptied.
Therefore, count = 9 + 3 + 1 = 13.Input: N = 7, E = 5
Output: 8
Explanation:
Empty the 7 fully filled water bottles. Therefore, count = 7
Then exchange 5 bottles to obtain 1 fully filled bottle. Then empty that bottle.
Therefore, count = 7 + 1 = 8.
Approach: The following steps have to be followed to solve the problem:
- Store the value of N in a temporary variable, say a.
- Initialize a variable, say s, to store the count of empty bottles and another variable, say b, to store the count of bottles remaining after exchange.
- Now, iterate until a is not equal to 0 and increment s by a, as it will be the minimum number of bottles that have been emptied.
- Update the following values:
- a to (a + b) / e
- b to N – (a * e)
- N to (a+b)
- Return s as the required answer.
Below is the implementation of the above approach:
C++
// C++ program for the// above approach#include <bits/stdc++.h>using namespace std;// Function to find the maximum// bottles that can be emptiedint maxBottles(int n, int e){ int s = 0, b = 0; int a = n; // Iterate until a // is non-zero while (a != 0) { // Add the number of // bottles that are emptied s = s + a; // Update a after // exchanging empty bottles a = (a + b) / e; // Stores the number of bottles // left after the exchange b = n - (a * e); n = a + b; } // Return the answer return s;}// Driver Codeint main(){ int n = 9, e = 3; // Function call int s = maxBottles(n, e); cout << s << endl;} |
C
// C program for the above approach#include <stdio.h>// Function to find the maximum// bottles that can be emptiedint maxBottles(int n, int e){ int s = 0, b = 0; int a = n; // Iterate until a// is non-zero while (a != 0) { // Add the number of // bottles that are emptied s = s + a; // Update a after // exchanging empty bottles a = (a + b) / e; // Stores the number of bottles // left after the exchange b = n - (a * e); n = a + b; } // Return the answer return s;}// Driver Codeint main(){ int n = 9, e = 3; // Function call int s = maxBottles(n, e); printf("%d",s);}// This code is contributed by allwink45. |
Java
// Java program for the// above approachimport java.util.*;class GFG{// Function to find the maximum// bottles that can be emptiedstatic int maxBottles(int n, int e){ int s = 0, b = 0; int a = n; // Iterate until a // is non-zero while (a != 0) { // Add the number of // bottles that are emptied s = s + a; // Update a after // exchanging empty bottles a = (a + b) / e; // Stores the number of bottles // left after the exchange b = n - (a * e); n = a + b; } // Return the answer return s;}// Driver Codepublic static void main(String[] args){ int n = 9, e = 3; // Function call int s = maxBottles(n, e); System.out.print(s + "\n");}}// This code is contributed by 29AjayKumar |
Python3
# Python3 program for the# above approach# Function to find the maximum# bottles that can be emptieddef maxBottles(n, e): s = 0 b = 0 a = n # Iterate until a # is non-zero while (a != 0): # Add the number of # bottles that are emptied s = s + a # Update a after # exchanging empty bottles a = (a + b) // e # Stores the number of bottles # left after the exchange b = n - (a * e) n = a + b # Return the answer return s# Driver Codeif __name__ == '__main__': n = 9 e = 3 # Function call s = maxBottles(n, e) print(s)# This code is contributed by mohit kumar 29 |
C#
// C# program for the above approach using System;class GFG{// Function to find the maximum// bottles that can be emptiedstatic int maxBottles(int n, int e){ int s = 0, b = 0; int a = n; // Iterate until a // is non-zero while (a != 0) { // Add the number of // bottles that are emptied s = s + a; // Update a after // exchanging empty bottles a = (a + b) / e; // Stores the number of bottles // left after the exchange b = n - (a * e); n = a + b; } // Return the answer return s;}// Driver Codepublic static void Main(){ int n = 9, e = 3; // Function call int s = maxBottles(n, e); Console.Write(s + "\n");}}// This code is contributed by code_hunt |
Javascript
<script>// javascript program for the// above approach// Function to find the maximum// bottles that can be emptiedfunction maxBottles(n, e){ var s = 0, b = 0; var a = n; // Iterate until a // is non-zero while (a != 0) { // Add the number of // bottles that are emptied s = s + a; // Update a after // exchanging empty bottles a = (a + b) / e; // Stores the number of bottles // left after the exchange b = n - (a * e); n = a + b; } // Return the answer return s;}// Driver Codevar n = 9, e = 3;// Function callvar s = maxBottles(n, e);document.write(parseInt(s) + "\n");// This code contributed by Princi Singh </script> |
Output:
13
Time Complexity: O(N)
Auxiliary Space: O(1)
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 zambiatek!



