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++
#include <bits/stdc++.h>
using namespace std;
int maxBottles( int n, int e)
{
int s = 0, b = 0;
int a = n;
while (a != 0) {
s = s + a;
a = (a + b) / e;
b = n - (a * e);
n = a + b;
}
return s;
}
int main()
{
int n = 9, e = 3;
int s = maxBottles(n, e);
cout << s << endl;
}
|
C
#include <stdio.h>
int maxBottles( int n, int e)
{
int s = 0, b = 0;
int a = n;
while (a != 0) {
s = s + a;
a = (a + b) / e;
b = n - (a * e);
n = a + b;
}
return s;
}
int main()
{
int n = 9, e = 3;
int s = maxBottles(n, e);
printf ( "%d" ,s);
}
|
Java
import java.util.*;
class GFG{
static int maxBottles( int n, int e)
{
int s = 0 , b = 0 ;
int a = n;
while (a != 0 )
{
s = s + a;
a = (a + b) / e;
b = n - (a * e);
n = a + b;
}
return s;
}
public static void main(String[] args)
{
int n = 9 , e = 3 ;
int s = maxBottles(n, e);
System.out.print(s + "\n" );
}
}
|
Python3
def maxBottles(n, e):
s = 0
b = 0
a = n
while (a ! = 0 ):
s = s + a
a = (a + b) / / e
b = n - (a * e)
n = a + b
return s
if __name__ = = '__main__' :
n = 9
e = 3
s = maxBottles(n, e)
print (s)
|
C#
using System;
class GFG{
static int maxBottles( int n, int e)
{
int s = 0, b = 0;
int a = n;
while (a != 0)
{
s = s + a;
a = (a + b) / e;
b = n - (a * e);
n = a + b;
}
return s;
}
public static void Main()
{
int n = 9, e = 3;
int s = maxBottles(n, e);
Console.Write(s + "\n" );
}
}
|
Javascript
<script>
function maxBottles(n, e)
{
var s = 0, b = 0;
var a = n;
while (a != 0)
{
s = s + a;
a = (a + b) / e;
b = n - (a * e);
n = a + b;
}
return s;
}
var n = 9, e = 3;
var s = maxBottles(n, e);
document.write(parseInt(s) + "\n" );
</script>
|
Output:
13
Time Complexity: O(N)
Auxiliary Space: O(1)
Last Updated :
26 May, 2022
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...