Verifique si es posible hacer que la suma de Array sea igual al producto de Array reemplazando exactamente un elemento

Dada una array arr[] que consta de N enteros no negativos, la tarea es verificar si es posible hacer que la suma de la array sea igual al producto del elemento de la array reemplazando exactamente un elemento de la array con cualquier entero no negativo .

Ejemplos:

Entrada: arr[] = {1, 3, 4}
Salida:
Explicación:
Reemplazar el último elemento de la array con 2 modifica la array a {1, 3, 2}. La suma del elemento del arreglo = 6 y El producto del elemento del arreglo es 1*2*3 = 6. Por lo tanto, imprima Sí.

Entrada: arr[] = {1, 2, 3}
Salida: No

Enfoque: El problema dado se puede resolver usando las siguientes observaciones matemáticas:

Considere la suma de los elementos de la array como S y el producto de los elementos de la array como P y después de reemplazar cualquier elemento de la array X con Y , la suma y el producto de los elementos de la array deben ser iguales, la ecuación se convierte en:

=> S – X + Y = P * Y / X
=> Y = (S – X) / (P / X – 1)

A partir de las observaciones anteriores, la idea es encontrar la suma y el producto de los elementos de la array como S y P y luego iterar sobre el elemento de la array (digamos X ) y encontrar el valor de Y usando la ecuación anterior y si existe algún elemento de la array. teniendo el valor de Y como un entero no negativo completo, imprima Yes . De lo contrario , imprima No.

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 check if it is possible to form an array
// whose sum and the product is the same or not
int canPossibleReplacement(int N, int arr[])
{
 
    // Find the sum of the array initialize sum
    int S = 0;
    int i;
 
    // Iterate through all elements and add them to sum
    for (i = 0; i < N; i++)
        S += arr[i];
 
    // Find the product of the array
    int P = 1;
 
    for (i = 0; i < N; i++)
        P *= i;
 
    // Check a complete integer y for every x
    for (int i = 0; i < N; i++) {
        int x = arr[i];
        int y = (S - x) / (P / x - 1);
        // If got such y
        if ((S - x + y) == (P * y) / x)
            return 1;
    }
 
    // If no such y exist
    return 0;
}
 
// Driver Code
int main()
{
    int N = 3;
    int arr[] = { 1, 3, 4 };
 
    if (canPossibleReplacement(N, arr) == 1)
        printf("Yes");
    else
        printf("No");
    return 0;
}
 
// This code is contributed by Sania Kumari Gupta

C

// C Program to implement the above approach
#include <stdio.h>
 
// Function to check if it is possible to form an array
// whose sum and the product is the same or not
int canPossibleReplacement(int N, int arr[])
{
    // Find the sum of the array initialize sum
    int S = 0;
    int i;
 
    // Iterate through all elements and add them to sum
    for (i = 0; i < N; i++)
        S += arr[i];
 
    // Find the product of the array
    int P = 1;
 
    for (i = 0; i < N; i++)
        P *= i;
 
    // Check a complete integer y for every x
    for (int i = 0; i < N; i++) {
        int x = arr[i];
        int y = (S - x) / (P / x - 1);
        // If got such y
        if ((S - x + y) == (P * y) / x)
            return 1;
    }
 
    // If no such y exist
    return 0;
}
 
// Driver Code
int main()
{
    int N = 3;
    int arr[] = { 1, 3, 4 };
 
    if (canPossibleReplacement(N, arr) == 1)
        printf("Yes");
    else
        printf("No");
    return 0;
}
 
// This code is contributed by Sania Kumari Gupta

Java

// Java program for the above approach
import java.util.*;
 
class GFG{
     
// Function to check if it is possible
// to form an array whose sum and the
// product is the same or not
static int canPossibleReplacement(int N, int[] arr)
{
     
    // Find the sum of the array
    // initialize sum
    int S = 0;
    int i;
        
    // Iterate through all elements and
    // add them to sum
    for(i = 0; i < arr.length; i++)
        S +=  arr[i];
 
    // Find the product of the array
    int P = 1;
 
    for(i = 0; i < arr.length; i++)
    {
        P *= i;
    }
 
    // Check a complete integer y
    // for every x
    for(int x : arr)
    {
        int y = (S - x)/(P / x - 1);
 
        // If got such y
        if ((S - x + y) == (P * y) / x)
            return 1;
    }
 
    // If no such y exist
    return 0;
}
   
// Driver Code
public static void main(String[] args)
{
    int N = 3;
    int arr[] = { 1, 3, 4 };
     
    if (canPossibleReplacement(N, arr) == 1)
        System.out.print("Yes");
    else
        System.out.print("No");
}
}
 
// This code is contributed by sanjoy_62

Python3

# Python program for the above approach
 
# Function to check if it is possible
# to form an array whose sum and the
# product is the same or not
def canPossibleReplacement(N, arr):
 
    # Find the sum of the array
    S = sum(arr)
 
    # Find the product of the array
    P = 1
 
    for i in arr:
        P *= i
 
    # Check a complete integer y
    # for every x
    for x in arr:
 
        y = (S-x)//(P / x-1)
 
        # If got such y
        if (S-x + y) == (P * y)/x:
 
            return 'Yes'
 
    # If no such y exist
    return 'No'
 
 
# Driver Code
N, arr = 3, [1, 3, 4]
print(canPossibleReplacement(N, arr))

C#

// C# program for the above approach
 
using System;
 
class GFG{
     
// Function to check if it is possible
// to form an array whose sum and the
// product is the same or not
static int canPossibleReplacement(int N, int[] arr)
{
     
    // Find the sum of the array
    // initialize sum
    int S = 0;
    int i;
        
    // Iterate through all elements and
    // add them to sum
    for(i = 0; i < arr.Length; i++)
        S +=  arr[i];
 
    // Find the product of the array
    int P = 1;
 
    for(i = 0; i < arr.Length; i++)
    {
        P *= i;
    }
 
    // Check a complete integer y
    // for every x
    foreach(int x in arr)
    {
        int y = (S - x)/(P / x - 1);
 
        // If got such y
        if ((S - x + y) == (P * y) / x)
            return 1;
    }
 
    // If no such y exist
    return 0;
}
   
// Driver Code
public static void Main(string[] args)
{
    int N = 3;
    int []arr = { 1, 3, 4 };
     
    if (canPossibleReplacement(N, arr) == 1)
        Console.Write("Yes");
    else
         Console.Write("No");
}
}
 
// This code is contributed by AnkThon

Javascript

<script>
 
// javascript Program to implement
// the above approach
 
// Function to check if it is possible
// to form an array whose sum and the
// product is the same or not
function canPossibleReplacement(N, arr)
{
 
    // Find the sum of the array
    // initialize sum
    var S = 0;
    var i;
 
    // Iterate through all elements and
    // add them to sum
    for (i = 0; i < N; i++)
        S += arr[i];
 
    // Find the product of the array
    var P = 1;
 
    for (i = 0; i < N; i++)
    {
        P *= i;
    }
 
    // Check a complete integer y
    // for every x
    for (i = 0; i < N; i++)
    {
        var x = arr[i];
        var y = (S - x) / (P / x - 1);
 
        // If got such y
        if ((S - x + y) == (P * y) / x)
            return 1;
    }
 
    // If no such y exist
    return 0;
}
 
// Driver Code
    var N = 3;
    var arr = [1, 3, 4]
 
    if (canPossibleReplacement(N, arr) == 1)
        document.write("Yes");
    else
        document.write("No");
 
// This code is contributed by ipg2016107.
</script>
Producción: 

Yes

 

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

Publicación traducida automáticamente

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