Saturday, January 11, 2025
Google search engine
HomeData Modelling & AIMaximize count of empty water bottles from N filled bottles

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 emptied
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 Code
int 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 emptied
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 Code
int 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 approach
import java.util.*;
 
class GFG{
 
// Function to find the maximum
// bottles that can be emptied
static 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 Code
public 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 emptied
def 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 Code
if __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 emptied
static 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 Code
public 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 emptied
function 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 Code
 
var n = 9, e = 3;
 
// Function call
var 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)

Feeling lost in the world of random DSA topics, wasting time without progress? It’s time for a change! Join our DSA course, where we’ll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!

RELATED ARTICLES

Most Popular

Recent Comments