Dada una array arr[] de N enteros, la tarea es verificar si es posible redistribuir la array de manera que para cada 1 ≤ i ≤ N (indexación basada en 1) arr[i] = i . Redistribuir la array significa que todos los elementos de la array se pueden cambiar a cualquier otro elemento, pero la suma de la array resultante debe ser igual a la suma de la array original.
Ejemplos:
Entrada: arr[] = {7, 4, 1, 1, 2}
Salida: Sí
7 + 4 + 1 + 1 + 2 = 15
1 + 2 + 3 + 4 + 5 = 15
Entrada: arr[] = {1 , 1, 1, 1}
Salida: No
1 + 1 + 1 + 1 = 4
1 + 2 + 3 + 4 = 10
Planteamiento: Se da que la suma del arreglo no debe cambiar después de la modificación. Entonces, calcule la suma de la array dada y para que la array tenga la forma 1, 2, 3, …, N , la suma de los elementos de la array debe ser (N * (N + 1)) / 2 . De lo contrario, es imposible.
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ implementation of the approach #include <bits/stdc++.h> using namespace std; // Function that returns true if the // array can be redistributed to // the form 1, 2, 3, ..., N bool canRedistribute(int* a, int n) { // Calculate the sum of the array elements int sum = 0; for (int i = 0; i < n; i++) sum += a[i]; // If can be redistributed if (sum == (n * (n + 1)) / 2) return true; return false; } // Driver code int main() { int a[] = { 7, 4, 1, 1, 2 }; int n = sizeof(a) / sizeof(int); if (canRedistribute(a, n)) cout << "Yes"; else cout << "No"; return 0; }
Java
// Java implementation of the approach import java.io.*; class GFG { // Function that returns true if the // array can be redistributed to // the form 1, 2, 3, ..., N static boolean canRedistribute(int []a, int n) { // Calculate the sum of the array elements int sum = 0; for (int i = 0; i < n; i++) sum += a[i]; // If can be redistributed if (sum == (n * (n + 1)) / 2) return true; return false; } // Driver code public static void main (String[] args) { int a[] = { 7, 4, 1, 1, 2 }; int n = a.length; if (canRedistribute(a, n)) System.out.print( "Yes"); else System.out.print("No"); } } // This code is contributed by anuj_67..
Python3
# Python implementation of the approach # Function that returns true if the # array can be redistributed to # the form 1, 2, 3, ..., N def canRedistribute(a, n): # Calculate the sum of the array elements sum = 0; for i in range(n): sum += a[i]; # If can be redistributed if (sum == (n * (n + 1)) / 2): return True; return False; # Driver code a = [7, 4, 1, 1, 2 ]; n = len(a); if (canRedistribute(a, n)): print("Yes"); else: print("No"); # This code is contributed by 29AjayKumar
C#
// C# implementation of the approach using System; class GFG { // Function that returns true if the // array can be redistributed to // the form 1, 2, 3, ..., N static Boolean canRedistribute(int []a, int n) { // Calculate the sum of the array elements int sum = 0; for (int i = 0; i < n; i++) sum += a[i]; // If can be redistributed if (sum == (n * (n + 1)) / 2) return true; return false; } // Driver code public static void Main (String[] args) { int []a = { 7, 4, 1, 1, 2 }; int n = a.Length; if (canRedistribute(a, n)) Console.WriteLine( "Yes"); else Console.WriteLine("No"); } } /* This code is contributed by PrinciRaj1992 */
Javascript
<script> //Javascript implementation of the approach // Function that returns true if the // array can be redistributed to // the form 1, 2, 3, ..., N function canRedistribute(a, n) { // Calculate the sum of the array elements var sum = 0; for (var i = 0; i < n; i++) sum += a[i]; // If can be redistributed if (sum == (n * (n + 1)) / 2) return true; return false; } var a = [ 7, 4, 1, 1, 2 ]; var n = a.length; if (canRedistribute(a, n)) document.write("Yes"); else document.write( "No"); // This code is contributed by SoumikMondal </script>
Yes
Publicación traducida automáticamente
Artículo escrito por ayushgoyal y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA