Dada una array arr[] de tamaño N , la tarea es construir una array brr[] de tamaño N que satisfaga las siguientes condiciones:
- En cada par de elementos consecutivos del arreglo brr[] , un elemento debe ser divisible por el otro, es decir, brr[i] debe ser divisible por brr[i + 1] o viceversa.
- Cada i -ésimo elemento en la array brr[] debe satisfacer brr[i] >= arr[i] / 2 .
- La suma de los elementos del arreglo arr[] debe ser mayor o igual a 2 * Σabs(arr[i] – brr[i]) .
Ejemplos:
Entrada: arr[] = { 11, 5, 7, 3, 2 }
Salida: 8 4 4 2 2
Explicación:
abs(11 – 8) + abs(5 – 4) + abs(7 – 4) + abs(3 – 2) + abs(2 – 2) = 8
arr[0] + arr[1] + … + arr[4] = 28
2 * 8 <= 28 y para cada i -ésimo elemento brr[i] >= arr[ i] / 2.
Por lo tanto, uno de los posibles valores de brr[] es 8 4 4 2 2.Entrada: arr[] = { 11, 7, 5 }
Salida: { 8, 4, 4 }
Enfoque: La idea se basa en la siguiente observación:
Si brr[i] es la potencia de 2 más cercana y es menor o igual que arr[i] , entonces brr[i] debe ser mayor o igual que arr[i] / 2 y también la suma de los elementos del arreglo , arr[] debe ser mayor o igual que 2 * Σabs(arr[i] – brr[i]) .
Siga los pasos a continuación para resolver el problema:
- Inicialice una array, brr[] , para almacenar los elementos que cumplan las condiciones dadas.
- Recorre la array arr[] . Para cada i -ésimo elemento, encuentre la potencia de 2 más cercana que sea menor o igual que arr[i] y guárdela en brr[i] .
- Finalmente, imprima la array brr[] .
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 construct an array // with given conditions void constructArray(int arr[], int N) { int brr[N] = { 0 }; // Traverse the array arr[] for (int i = 0; i < N; i++) { int K = log(arr[i]) / log(2); // Stores closest power of 2 // less than or equal to arr[i] int R = pow(2, K); // Stores R into brr[i] brr[i] = R; } // Print array elements for (int i = 0; i < N; i++) { cout << brr[i] << " "; } } // Driver Code int main() { // Given array int arr[] = { 11, 5, 7, 3, 2 }; // Size of the array int N = sizeof(arr) / sizeof(arr[0]); // Function Call constructArray(arr, N); return 0; }
Java
// Java program for the above approach import java.util.*; class GFG{ // Function to construct an array // with given conditions static void constructArray(int arr[], int N) { int brr[] = new int[N]; // Traverse the array arr[] for(int i = 0; i < N; i++) { int K = (int)(Math.log(arr[i]) / Math.log(2)); // Stores closest power of 2 // less than or equal to arr[i] int R = (int)Math.pow(2, K); // Stores R into brr[i] brr[i] = R; } // Print array elements for(int i = 0; i < N; i++) { System.out.print(brr[i] + " "); } } // Driver Code public static void main(String[] args) { // Given array int arr[] = { 11, 5, 7, 3, 2 }; // Size of the array int N = arr.length; // Function Call constructArray(arr, N); } } // This code is contributed by 29AjayKumar
Python3
# Python3 program for the above approach from math import log # Function to construct an array # with given conditions def constructArray(arr, N): brr = [0]*N # Traverse the array arr[] for i in range(N): K = int(log(arr[i])/log(2)) # Stores closest power of 2 # less than or equal to arr[i] R = pow(2, K) # Stores R into brr[i] brr[i] = R # Print array elements for i in range(N): print(brr[i], end = " ") # Driver Code if __name__ == '__main__': # Given array arr = [11, 5, 7, 3, 2] # Size of the array N = len(arr) # Function Call constructArray(arr, N) # This code is contributed by mohit kumar 29
C#
// C# program for the above approach using System; class GFG{ // Function to construct an array // with given conditions static void constructArray(int []arr, int N) { int[] brr = new int[N]; Array.Clear(brr, 0, brr.Length); // Traverse the array arr[] for(int i = 0; i < N; i++) { int K = (int)(Math.Log(arr[i]) / Math.Log(2)); // Stores closest power of 2 // less than or equal to arr[i] int R = (int)Math.Pow(2, K); // Stores R into brr[i] brr[i] = R; } // Print array elements for(int i = 0; i < N; i++) { Console.Write(brr[i] + " "); } } // Driver Code public static void Main() { // Given array int []arr = { 11, 5, 7, 3, 2 }; // Size of the array int N = arr.Length; // Function Call constructArray(arr, N); } } // This code is contributed by SURENDRA_GANGWAR
Javascript
<script> // JavaScript program for the above approach // Function to construct an array // with given conditions function constructArray(arr , N) { var brr = Array(N).fill(0); // Traverse the array arr for (i = 0; i < N; i++) { var K = parseInt( (Math.log(arr[i]) / Math.log(2))); // Stores closest power of 2 // less than or equal to arr[i] var R = parseInt( Math.pow(2, K)); // Stores R into brr[i] brr[i] = R; } // Print array elements for (i = 0; i < N; i++) { document.write(brr[i] + " "); } } // Driver Code // Given array var arr = [ 11, 5, 7, 3, 2 ]; // Size of the array var N = arr.length; // Function Call constructArray(arr, N); // This code is contributed by todaysgaurav </script>
8 4 4 2 2
Complejidad temporal: O(N)
Espacio auxiliar: O(N)
Publicación traducida automáticamente
Artículo escrito por aniket173000 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA