Comprobar si es posible redistribuir el Array

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>
Producción: 

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *