Dada una array arr[] de tamaño N , la tarea es imprimir la potencia de 2 más cercana para cada elemento de la array.
Nota: si resulta que hay dos potencias de 2 más cercanas, considere la más grande.
Ejemplos:
Entrada: arr[] = {5, 2, 7, 12}
Salida: 4 2 8 16
Explicación:
La potencia más cercana de arr[0] ( = 5) es 4.
La potencia más cercana de arr[1] ( = 2) es 2.
La potencia más cercana de arr[2] ( = 7) es 8.
La potencia más cercana de arr[3] ( = 12) son 8 y 16. Imprime 16, ya que es la más grande.Entrada: arr[] = {31, 13, 64}
Salida: 32 16 64
Enfoque: siga los pasos a continuación para resolver el problema:
- Atraviesa la array de izquierda a derecha.
- Para cada elemento de la array, encuentre las potencias de 2 más cercanas mayores y menores que él, es decir, calcule pow(2, log 2 (arr[i])) y pow(2, log 2 (arr[i]) + 1) .
- Calcule la diferencia de estos dos valores del elemento de array actual e imprima el más cercano como se especifica en el enunciado del problema.
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ program to implement // the above approach #include <bits/stdc++.h> using namespace std; // Function to find nearest power of two // for every element in the given array void nearestPowerOfTwo(int arr[], int N) { // Traverse the array for (int i = 0; i < N; i++) { // Calculate log of the // current array element int lg = log2(arr[i]); int a = pow(2, lg); int b = pow(2, lg + 1); // Find the nearest if ((arr[i] - a) < (b - arr[i])) cout << a << " "; else cout << b << " "; } } // Driver Code int main() { int arr[] = { 5, 2, 7, 12 }; int N = sizeof(arr) / sizeof(arr[0]); nearestPowerOfTwo(arr, N); return 0; }
Java
// Java program to implement the above approach import java.io.*; class GFG { // Function to find the nearest power of two // for every element of the given array static void nearestPowerOfTwo(int[] arr, int N) { // Traverse the array for (int i = 0; i < N; i++) { // Calculate log of the // current array element int lg = (int)(Math.log(arr[i]) / Math.log(2)); int a = (int)(Math.pow(2, lg)); int b = (int)(Math.pow(2, lg + 1)); // Find the nearest if ((arr[i] - a) < (b - arr[i])) System.out.print(a + " "); else System.out.print(b + " "); } } // Driver Code public static void main(String[] args) { int[] arr = { 5, 2, 7, 12 }; int N = arr.length; nearestPowerOfTwo(arr, N); } }
Python3
# Python program to implement the above approach import math # Function to find the nearest power # of two for every array element def nearestPowerOfTwo(arr, N): # Traverse the array for i in range(N): # Calculate log of current array element lg = (int)(math.log2(arr[i])) a = (int)(math.pow(2, lg)) b = (int)(math.pow(2, lg + 1)) # Find the nearest if ((arr[i] - a) < (b - arr[i])): print(a, end = " ") else: print(b, end = " ") # Driver Code arr = [5, 2, 7, 12] N = len(arr) nearestPowerOfTwo(arr, N)
C#
// C# program to implement the above approach using System; class GFG { // Function to find nearest power of two // for every array element static void nearestPowerOfTwo(int[] arr, int N) { // Traverse the array for (int i = 0; i < N; i++) { // Calculate log of the // current array element int lg = (int)(Math.Log(arr[i]) / Math.Log(2)); int a = (int)(Math.Pow(2, lg)); int b = (int)(Math.Pow(2, lg + 1)); // Find the nearest if ((arr[i] - a) < (b - arr[i])) Console.Write(a + " "); else Console.Write(b + " "); } } // Driver Code public static void Main(String[] args) { int[] arr = { 5, 2, 7, 12 }; int N = arr.Length; nearestPowerOfTwo(arr, N); } }
Javascript
<script> // JavaScript program to implement // the above approach // Function to find the nearest power of two // for every element of the given array function nearestPowerOfTwo(arr , N) { // Traverse the array for (i = 0; i < N; i++) { // Calculate log of the // current array element var lg = parseInt( (Math.log(arr[i]) / Math.log(2))); var a = parseInt( (Math.pow(2, lg))); var b = parseInt( (Math.pow(2, lg + 1))); // Find the nearest if ((arr[i] - a) < (b - arr[i])) document.write(a + " "); else document.write(b + " "); } } // Driver Code var arr = [ 5, 2, 7, 12 ]; var N = arr.length; nearestPowerOfTwo(arr, N); // This code is contributed by todaysgaurav </script>
4 2 8 16
Complejidad temporal: O(N)
Espacio auxiliar: O(1)
Publicación traducida automáticamente
Artículo escrito por subhammahato348 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA