Encuentre instancias al final del período de tiempo después del escalado automático

Dado un número entero, instancias y una array , arr[] de tamaño N que representa el porcentaje de utilización promedio del sistema informático en cada segundo, la tarea es encontrar el número de instancias al final del período de tiempo tal que el sistema informático escala automáticamente el número de instancias de acuerdo con las siguientes reglas: 

  • Utilización promedio < 25 %: reduzca la cantidad de instancias a la mitad si la cantidad de instancias es mayor que 1.
  • 25 % ≤ Utilización media ≤ 60 %: No realice ninguna acción.
  • Uso promedio > 60 %: duplique el número de instancias si el valor duplicado no supera 2* 10 8 .

Una vez que se realiza una acción de agregar o reducir el número de instancias, el sistema dejará de monitorear durante 10 segundos. Durante ese tiempo, el número de instancias no cambia.

Ejemplos:

Entrada: instancias = 2, arr[] = {25, 23, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 76, 80} Salida: 2 Explicación: en el segundo
1 ,
arr
[ 0] = 25 ≤ 25, así que no haga nada.
En el segundo 2, arr[1] = 23 < 25, por lo que se instancia una acción para reducir a la mitad el número de instancias a ceil(2/2) = 1. El sistema dejará de verificar durante 10 segundos, por lo que desde arr[2] hasta arr[11] no se tomarán medidas.
En el segundo 13, arr[12] = 76 > 60, por lo que el número de instancias se duplica de 1 a 2.

No hay más lecturas a considerar y 2 es el valor final.

Entrada: instancias = 5, arr = {30, 5, 4, 8, 19, 89}
Salida: 3
Explicación:
en el segundo 1, 25 ≤ arr[0] = 30 ≤ 60, así que no realice ninguna acción.
En el segundo 2, arr[1] = 5 < 25, por lo que se instancia una acción para reducir a la mitad el número de instancias a ceil(5/2) = 3. El sistema dejará de
verificar durante 10 segundos, por lo que desde arr[2] hasta arr[5] no se tomarán medidas.

No hay más lecturas a considerar y 3 es la respuesta final.

Enfoque: el problema dado se puede resolver recorriendo la array dada arr[] y si el elemento actual es menor que 25, divida el número de instancias entre 2 si el número de instancias es mayor que 1. De lo contrario, si el valor actual es mayor a 60 multiplica el numero de instancias por 2 si el numero de instancias no es mayor a 10 8 , luego de realizar cualquiera de las dos operaciones incrementa el indice actual por 10. Sigue los pasos para resolver el problema:

  • Recorra el arreglo , arr[] usando la variable i y realice los siguientes pasos:
    • Si arr[i] es menor que 25 y las instancias son mayores que 1, divida las instancias por 2 e incremente i por 10 .
    • Si arr[i] es mayor que 60 y las instancias son menores o iguales a 10 8 , multiplique las instancias por 2 e incremente i por 10 .
    • Incremente el índice i en 1 .
  • Después de completar los pasos anteriores, imprima el número de instancias como resultado.

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 number of
// instances after compintion
void finalInstances(int instances,
                                  int arr[], int N)
{
    int i = 0;
 
    // Traverse the array, arr[]
    while (i < N)
    {
         
        // If current element is less
        // than 25
        if (arr[i] < 25 && instances > 1)
        {
             
            // Divide instances by 2 and take ceil value
            double temp = (instances / 2.0);
            instances = (int)(ceil(temp));
            i = i + 10;
        }
 
        // If the current element is
        // greater than 60
        else if (arr[i] > 60 &&
                 instances <= (2*pow(10, 8)))
        {
             
            // Double the instances
            instances = instances * 2;
            i = i + 10;
        }
        i = i + 1;
    }
     
    // Print the instances at the end
    // of the traversal
    cout << instances;
}
 
// Driver Code
int main()
{
    int instances = 2;
    int arr[] = { 25, 23, 1, 2, 3, 4, 5,
                  6, 7, 8, 9, 10, 76, 80 };
                   
    int N = sizeof(arr) / sizeof(arr[0]);
 
    // Function Call
    finalInstances(instances, arr, N);
}
 
// This code is contributed by splevel62

Java

// Java program for above approach
class GFG{
 
// Function to find the number of
// instances after compintion
public static void finalInstances(int instances,
                                  int[] arr)
{
    int i = 0;
 
    // Traverse the array, arr[]
    while (i < arr.length)
    {
         
        // If current element is less
        // than 25
        if (arr[i] < 25 && instances > 1)
        {
             
            // Divide instances by 2
            instances = (instances / 2);
            i = i + 10;
        }
 
        // If the current element is
        // greater than 60
        else if (arr[i] > 60 &&
                 instances <= Math.pow(10, 8))
        {
             
            // Double the instances
            instances = instances * 2;
            i = i + 10;
        }
        i = i + 1;
    }
     
    // Print the instances at the end
    // of the traversal
    System.out.println(instances);
}
 
// Driver Code
public static void main(String args[])
{
    int instances = 2;
    int[] arr = { 25, 23, 1, 2, 3, 4, 5,
                  6, 7, 8, 9, 10, 76, 80 };
 
    // Function Call
    finalInstances(instances, arr);
}
}
 
// This code is contributed by _saurabh_jaiswal

Python3

# Python program for the above approach
from math import ceil
 
# Function to find the number of
# instances after completion
def finalInstances(instances, arr):
    i = 0
 
    # Traverse the array, arr[]
    while i < len(arr):
 
        # If current element is less
        # than 25
        if arr[i] < 25 and instances > 1:
           
            # Divide instances by 2
            instances = ceil(instances / 2)
            i += 10
 
        # If the current element is
        # greater than 60
        elif arr[i] > 60 and instances <= 10**8:
           
            # Double the instances
            instances *= 2
            i += 10
        i += 1
 
    # Print the instances at the end
    # of the traversal
    print(instances)
 
# Driver Code
instances = 2
 
arr = [25, 23, 1, 2, 3, 4, 5,
       6, 7, 8, 9, 10, 76, 80]
 
# Function Call
finalInstances(instances, arr)

C#

// C# program for above approach
using System;
 
class GFG{
 
// Function to find the number of
// instances after compintion
static void finalInstances(int instances, int[] arr)
{
        int i = 0;
   
        // Traverse the array, arr[]
        while (i < arr.Length) {
 
            // If current element is less
            // than 25
            if (arr[i] < 25 && instances > 1) {
 
                // Divide instances by 2
                instances = (instances / 2);
                i = i + 10;
            }
 
            // If the current element is
            // greater than 60
            else if (arr[i] > 60 && instances <= Math.Pow(10, 8))
            {
 
                // Double the instances
                instances = instances * 2;
                i = i + 10;
 
            }
            i = i + 1;
 
        }
        // Print the instances at the end
        // of the traversal
        Console.Write(instances);
    }
 
 
// Driver Code
static void Main()
{
    int instances = 2;
 
    int[] arr = {25, 23, 1, 2, 3, 4, 5,
        6, 7, 8, 9, 10, 76, 80};
 
    // Function Call
    finalInstances(instances, arr);
}
}
 
// This code is contributed by sanjoy_62.

Javascript

<script>
  
        // JavaScript Program for the above approach
 
        // Function to find the number of
        // instances after completion
        function finalInstances(instances, arr) {
            let i = 0;
 
            // Traverse the array, arr[]
            while (i < arr.length) {
 
                // If current element is less
                // than 25
                if (arr[i] < 25 && instances > 1) {
 
                    // Divide instances by 2
                    instances = Math.ceil(instances / 2);
                    i = i + 10;
                }
 
                // If the current element is
                // greater than 60
                else if (arr[i] > 60 && instances <= Math.pow(10, 8))
                {
 
                    // Double the instances
                    instances = instances * 2;
                    i = i + 10;
 
                }
                i = i + 1;
 
            }
            // Print the instances at the end
            // of the traversal
            document.write(instances);
        }
        // Driver Code
        let instances = 2;
 
        let arr = [25, 23, 1, 2, 3, 4, 5,
            6, 7, 8, 9, 10, 76, 80];
 
        // Function Call
        finalInstances(instances, arr);
 
    // This code is contributed by Potta Lokesh
     
</script>
Producción: 

2

 

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

Publicación traducida automáticamente

Artículo escrito por srichakradhar 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 *