Reemplace todos los elementos de la array con la potencia más cercana de su elemento anterior

Dada una array circular arr[] que consta de N enteros, la tarea es reemplazar todos los elementos de la array con la potencia más cercana posible de su elemento adyacente anterior

Ejemplos:

Entrada: arr[] = {2, 4, 6, 3, 11}
Salida: 1 4 4 6 9 
Explicación:
Potencia de 11 que es la más cercana a 2 —> 11 0 = 1
Potencia de 2 que es la más cercana a 4 —> 2 2 = 4
Potencia de 4 que está más cerca de 6 —> 4 1 = 4
Potencia de 6 que está más cerca de 3 —> 6 1 = 6
Potencia de 3 que está más cerca de 11—> 3 2 = 9

Entrada: arr[] = {3, 2, 4, 3}
Salida: 3 3 4 4
Explicación:
Potencia de 3 que está más cerca de 3 —> 3 1 = 3
Potencia de 3 que está más cerca de 2 —> 3 1 = 3
Potencia de 2 que está más cerca de 4 —> 2 2 = 4
Potencia de 4 que está más cerca de 3 —> 4 1 = 4

Enfoque: La idea para resolver este problema es atravesar el arreglo y para cada elemento del arreglo arr[i], encontrar la potencia del elemento anterior, digamos X, que es el más cercano a arr[i] , es decir, X K que es el más cercano a arr[yo] . Sigue los pasos:

  • Calcule el valor de K , que es igual al valor mínimo de log x (Y) .
  • Por lo tanto, K y (K + 1) serán los dos números enteros para los cuales la potencia podría ser más cercana.   
  • Calcula X K y X (K + 1) y comprueba cuál está más cerca de Y . Luego, imprime ese valor.

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

C++

// CPP program for the above approach
#include <iostream>
#include <cmath>
using namespace std;
 
// Function to calculate log x for given base
int LOG(int a, int b) {
    return log(a) / log(b);
}
 
// Function to replace all array
// elements with the nearest power
// of previous adjacent nelement
void repbyNP(int *arr,int n)
{
   
    // For the first element, set the last
    // array element to its previous element
    int x = arr[n - 1];
   
    // Traverse the array
    for(int i = 0; i < n; i++)
    {
       
        // Find K for which x ^ k is
        // nearest to arr[i]
        int k = LOG(arr[i], x);
        int temp = arr[i];
       
        // Find the power to x nearest to arr[i]
        if (abs(pow(x,k) - arr[i]) < abs(pow(x,k+1) - arr[i]))
            arr[i] = pow(x, k);
        else
            arr[i] = pow(x, k + 1);
       
        // Update x
        x = temp;
    }
}
int main()
{
   
    // Driver Code
    int arr[5] = {2, 4, 6, 3, 11};
    int n = sizeof(arr)/sizeof(arr[0]);
   
    // Function Call
    repbyNP(arr,n);
   
    // Display the array
    for(int i = 0; i < n; i++)
        cout<<arr[i]<<" ";
    return 0;
}
 
// This code is contributed by rohitsingh07052.

Java

// Java program for the above approach
import java.util.*;
  
class GFG
{
  
// Function to calculate log x for given base
static int LOG(int a, int b) {
    return (int)(Math.log(a) / Math.log(b));
}
  
// Function to replace all array
// elements with the nearest power
// of previous adjacent nelement
static void repbyNP(int[] arr,int n)
{
    
    // For the first element, set the last
    // array element to its previous element
    int x = arr[n - 1];
    
    // Traverse the array
    for(int i = 0; i < n; i++)
    {
        
        // Find K for which x ^ k is
        // nearest to arr[i]
        int k = LOG(arr[i], x);
        int temp = arr[i];
        
        // Find the power to x nearest to arr[i]
        if (Math.abs(Math.pow(x,k) - arr[i]) < Math.abs(Math.pow(x,k+1) - arr[i]))
            arr[i] = (int)Math.pow(x, k);
        else
            arr[i] = (int)Math.pow(x, k + 1);
        
        // Update x
        x = temp;
    }
}
  
// Driver Code
public static void main(String[] args)
{
    int arr[] = {2, 4, 6, 3, 11};
    int n = arr.length;
    
    // Function Call
    repbyNP(arr,n);
    
    // Display the array
    for(int i = 0; i < n; i++)
        System.out.print(arr[i] + " ");
}
}
 
// This code is contributed by sanjoy_62.

Python3

# Python3 program for the above approach
import math
 
# Function to calculate log x for given base
def LOG(x, base):
    return int(math.log(x)/math.log(base))
 
# Function to replace all array
# elements with the nearest power
# of previous adjacent nelement
def repbyNP(arr):
 
    # For the first element, set the last
    # array element to its previous element
    x = arr[-1]
 
    # Traverse the array
    for i in range(len(arr)):
 
        # Find K for which x ^ k is
        # nearest to arr[i]
        k = LOG(arr[i], x)
        temp = arr[i]
 
        # Find the power to x nearest to arr[i]
        if abs(x**k - arr[i]) < abs(x**(k + 1) - arr[i]):
            arr[i] = x**k
        else:
            arr[i] = x**(k + 1)
 
        # Update x
        x = temp
 
    # Return the array
    return arr
 
 
# Driver Code
arr = [2, 4, 6, 3, 11]
 
# Function Call
print(repbyNP(arr))

C#

// C# program for the above approach
using System;
 
class GFG{
 
// Function to calculate log x for given base
static int LOG(int a, int b) {
    return (int)(Math.Log(a) / Math.Log(b));
}
   
// Function to replace all array
// elements with the nearest power
// of previous adjacent nelement
static void repbyNP(int[] arr,int n)
{
     
    // For the first element, set the last
    // array element to its previous element
    int x = arr[n - 1];
     
    // Traverse the array
    for(int i = 0; i < n; i++)
    {
         
        // Find K for which x ^ k is
        // nearest to arr[i]
        int k = LOG(arr[i], x);
        int temp = arr[i];
         
        // Find the power to x nearest to arr[i]
        if (Math.Abs(Math.Pow(x, k) - arr[i]) <
            Math.Abs(Math.Pow(x, k + 1) - arr[i]))
            arr[i] = (int)Math.Pow(x, k);
        else
            arr[i] = (int)Math.Pow(x, k + 1);
         
        // Update x
        x = temp;
    }
}
 
// Driver Code
public static void Main(string[] args)
{
    int[] arr = {2, 4, 6, 3, 11};
    int n = arr.Length;
     
    // Function Call
    repbyNP(arr,n);
     
    // Display the array
    for(int i = 0; i < n; i++)
        Console.Write(arr[i] + " ");
}
}
 
// This code is contributed by code_hunt.

Javascript

<script>
// Javascript program for the above approach
 
// Function to calculate log x for given base
function LOG(a, b) {
    return parseInt(Math.log(a) / Math.log(b));
}
 
// Function to replace all array
// elements with the nearest power
// of previous adjacent nelement
function repbyNP(arr, n)
{
   
    // For the first element, set the last
    // array element to its previous element
    let x = arr[n - 1];
   
    // Traverse the array
    for(let i = 0; i < n; i++)
    {
       
        // Find K for which x ^ k is
        // nearest to arr[i]
        let k = LOG(arr[i], x);
        let temp = arr[i];
       
        // Find the power to x nearest to arr[i]
        if (Math.abs(Math.pow(x, k) - arr[i]) < Math.abs(Math.pow(x, k + 1) - arr[i]))
            arr[i] = Math.pow(x, k);
        else
            arr[i] = Math.pow(x, k + 1);
       
        // Update x
        x = temp;
    }
}
   
    // Driver Code
    let arr = [2, 4, 6, 3, 11];
    let n = arr.length;
   
    // Function Call
    repbyNP(arr, n);
   
    // Display the array
    for(let i = 0; i < n; i++)
        document.write(arr[i] + " ");
     
    // This code is contributed by rishavmahato348.
</script>
Producción: 

[1, 4, 4, 1, 9]

 

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

Publicación traducida automáticamente

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