Maximice el recuento de botellas de agua vacías de N botellas llenas

Dados dos números enteros N y E, donde N representa el número de botellas de agua llenas y E representa el número de botellas vacías que se pueden cambiar por una botella de agua llena. La tarea es encontrar el número máximo de botellas de agua que se pueden vaciar. 

Ejemplos:

Entrada: N = 9, E= 3
Salida: 13
Explicación:
Inicialmente, hay 9 botellas de agua completamente llenas. 
Todos ellos se vacían para obtener 9 botellas vacías. Por lo tanto, cuenta = 9
Luego cambia 3 botellas a la vez por 1 botella completamente llena. 
Por lo tanto, se obtienen 3 botellas completamente llenas. 
Luego esas 3 botellas se vacían para obtener 3 botellas vacías. Por lo tanto, contar = 9 + 3 = 12
Entonces esas 3 botellas se intercambian por 1 botella llena que se vacía. 
Por lo tanto, cuenta = 9 + 3 + 1 = 13 .

Entrada: N = 7, E = 5
Salida: 8
Explicación:
Vacíe las 7 botellas de agua completamente llenas. Por lo tanto, cuenta = 7
Luego intercambia 5 botellas para obtener 1 botella completamente llena. Luego vacía esa botella. 
Por lo tanto, cuenta = 7 + 1 = 8 .

Planteamiento: Se deben seguir los siguientes pasos para resolver el problema:

  • Almacene el valor de N en una variable temporal, digamos a. 
  • Inicialice una variable, digamos s, para almacenar el conteo de botellas vacías y otra variable, digamos b, para almacenar el conteo de botellas restantes después del intercambio.
  • Ahora iterar hasta que a no sea igual a 0 e incrementar s  en a , ya que será el número mínimo de botellas que se habrán vaciado.
  • Actualice los siguientes valores:
    • a a (a + b) / e
    • b a N – (a * e)
    • N a (a+b)
  • Devuelve s como la respuesta requerida.

A continuación se muestra la implementación del enfoque anterior:

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>

Producción:

13

Complejidad temporal: O(N)
Espacio auxiliar: O(1)

Publicación traducida automáticamente

Artículo escrito por IshwarGupta y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *