Compruebe si todos los subnúmeros tienen un producto de dígito distinto

Dado un número N, la tarea es verificar si todos los subnúmeros de este número tienen un producto de dígitos distinto.
Nota
 

  • Un número de N dígitos tiene N*(N+1)/2 subnúmeros. Por ejemplo, todos los subnúmeros posibles de 975 son 9, 7, 5, 97, 75, 975.
  • El producto de las cifras de un número es el producto de sus cifras.

Ejemplos: 
 

Input : N = 324
Output : YES
Sub-numbers of 324 are 3, 2, 4, 32, 24 and 324 
and digit products are 3, 2, 4, 6, 8 and 24 
respectively. All the digit products are different.

Input : N = 323
Output : NO
Sub-numbers of 323 are 3, 2, 3, 32, 23 and 323
and digit products are 3, 2, 3, 6, 6 and 18 
respectively. Digit products 3 and 6 have occurred 
twice. 

Acercarse :
 

  1. Haga una array de dígitos, es decir, una array con sus elementos como dígitos del número N dado.
  2. Ahora, encontrar subnúmeros de N es similar a encontrar todos los posibles subarreglos de la array de dígitos.
  3. Mantenga una lista de productos de dígitos de estos subarreglos.
  4. Si algún dígito del producto ha aparecido más de una vez, escriba NO.
  5. De lo contrario, escriba SÍ.

A continuación se muestra la implementación del enfoque anterior: 
 

C++

// C++ program to check if all sub-numbers
// have distinct Digit product
#include<bits/stdc++.h>
using namespace std;
 
 
// Function to calculate product of
// digits between given indexes
int digitProduct(int digits[], int start, int end)
{
    int pro = 1;
    for (int i = start; i <= end; i++) {
        pro *= digits[i];
    }
    return pro;
}
 
// Function to check if all sub-numbers
// have distinct Digit product
bool isDistinct(int N)
{
    string s = to_string(N);
     
    // Length of number N
    int len = s.length();
 
    // Digit array
    int digits[len];
 
    // set to maintain digit products
    unordered_set<int> products;
 
    for (int i = 0; i < len; i++) {
        digits[i] = s[i]-'0';
    }
 
    // Finding all possible subarrays
    for (int i = 0; i < len; i++) {
        for (int j = i; j < len; j++) {
 
            int val = digitProduct(digits, i, j);
 
            if (products.find(val)!=products.end())
                return false;
            else
                products.insert(val);
        }
    }
 
    return true;
}
 
// Driver code
int main()
{
    int N = 324;
 
    if (isDistinct(N))
        cout << "YES";
    else
        cout << "NO";
         
    return 0;
}

Java

// Java program to check if all sub-numbers
// have distinct Digit product
import java.io.*;
import java.util.*;
 
public class GFG {
 
    // Function to calculate product of
    // digits between given indexes
    static int digitProduct(int[] digits, int start, int end)
    {
        int pro = 1;
        for (int i = start; i <= end; i++) {
            pro *= digits[i];
        }
        return pro;
    }
 
    // Function to check if all sub-numbers
    // have distinct Digit product
    static boolean isDistinct(int N)
    {
        String s = "" + N;
 
        // Length of number N
        int len = s.length();
 
        // Digit array
        int[] digits = new int[len];
 
        // List to maintain digit products
        ArrayList<Integer> products = new ArrayList<>();
 
        for (int i = 0; i < len; i++) {
            digits[i] = Integer.parseInt("" + s.charAt(i));
        }
 
        // Finding all possible subarrays
        for (int i = 0; i < len; i++) {
            for (int j = i; j < len; j++) {
 
                int val = digitProduct(digits, i, j);
 
                if (products.contains(val))
                    return false;
                else
                    products.add(val);
            }
        }
 
        return true;
    }
 
    // Driver code
    public static void main(String args[])
    {
        int N = 324;
 
        if (isDistinct(N))
            System.out.println("YES");
        else
            System.out.println("NO");
    }
}

Python3

# Python3 program to check if all
# sub-numbers have distinct Digit product
 
# Function to calculate product of
# digits between given indexes
def digitProduct(digits, start, end):
 
    pro = 1
    for i in range(start, end + 1):
        pro *= digits[i]
     
    return pro
 
# Function to check if all sub-numbers
# have distinct Digit product
def isDistinct(N):
 
    s = str(N)
     
    # Length of number N
    length = len(s)
 
    # Digit array
    digits = [None] * length
 
    # set to maintain digit products
    products = set()
 
    for i in range(0, length):
        digits[i] = int(s[i])
     
    # Finding all possible subarrays
    for i in range(0, length):
        for j in range(i, length):
 
            val = digitProduct(digits, i, j)
     
            if val in products:
                return False
            else:
                products.add(val)
         
    return True
 
# Driver Code
if __name__ == "__main__":
 
    N = 324
 
    if isDistinct(N) == True:
        print("YES")
    else:
        print("NO")
         
# This code is contributed
# by Rituraj Jain

C#

// C# program to check if all sub-numbers
// have distinct Digit product
 
using System;
using System.Collections;
using System.Collections.Generic;
public class GFG {
 
    // Function to calculate product of
    // digits between given indexes
    static int digitProduct(int[] digits, int start, int end)
    {
        int pro = 1;
        for (int i = start; i <= end; i++) {
            pro *= digits[i];
        }
        return pro;
    }
 
    // Function to check if all sub-numbers
    // have distinct Digit product
    static bool isDistinct(int N)
    {
        string s = N.ToString();
 
        // Length of number N
        int len = s.Length;
 
        // Digit array
        int[] digits = new int[len];
 
        // List to maintain digit products
        ArrayList products = new ArrayList();
 
        for (int i = 0; i < len; i++) {
            digits[i] = s[i]-'0';
        }
 
        // Finding all possible subarrays
        for (int i = 0; i < len; i++) {
            for (int j = i; j < len; j++) {
 
                int val = digitProduct(digits, i, j);
 
                if (products.Contains(val))
                    return false;
                else
                    products.Add(val);
            }
        }
 
        return true;
    }
 
    // Driver code
    public static void Main()
    {
        int N = 324;
 
        if (isDistinct(N))
            Console.WriteLine("YES");
        else
            Console.WriteLine("NO");
    }
}
// This code is contributed by ihritik

PHP

<?PHP
// PHP program to check if all sub-numbers
// have distinct Digit product
 
// Function to calculate product of
// digits between given indexes
function digitProduct($digits, $start, $end)
{
    $pro = 1;
    for ($i = $start; $i <= $end; $i++) {
        $pro *= $digits[$i];
    }
    return $pro;
}
 
// Function to check if all sub-numbers
// have distinct Digit product
function isDistinct($N)
{
    $s ="$N";
     
    // Length of number N
    $len = sizeof($s);
 
    // Digit array
    $digits=array();
 
    //  to maintain digit products
    $products=array();
 
    for ($i = 0; $i < $len; $i++) {
        $digits[$i] = $s[$i]-'0';
    }
 
    // Finding all possible subarrays
    for ($i = 0; $i < $len; $i++) {
        for ($j = $i; $j < $len; $j++) {
 
            $val = digitProduct($digits, $i, $j);
 
            if (in_array($val,$products))
                return false;
            else
                array_push($products,$val);
        }
    }
 
    return true;
}
 
// Driver code
 
$N = 324;
 
if (isDistinct($N))
    echo "YES";
else
    echo "NO";
         
         
// This code is contributed by ihritik
         
?>

Javascript

<script>
// Javascript program to check if all sub-numbers
// have distinct Digit product
 
// Function to calculate product of
// digits between given indexes
function digitProduct(digits, start, end)
{
    let pro = 1;
    for (let i = start; i <= end; i++) {
        pro *= digits[i];
    }
    return pro;
}
 
// Function to check if all sub-numbers
// have distinct Digit product
function isDistinct(N)
{
    let s ="N";
     
    // Length of number N
    let len = s.length;
 
    // Digit array
    let digits = new Array();
 
    // to maintain digit products
    let products = new Array();
 
    for (let i = 0; i < len; i++) {
        digits[i] = s[i].charCodeAt(0) - '0'.charCodeAt(0);
    }
 
    // Finding all possible subarrays
    for (let i = 0; i < len; i++) {
        for (let j = i; j < len; j++) {
 
            let val = digitProduct(digits, i, j);
 
            if (products.includes(val))
                return false;
            else
                products.push(val);
        }
    }
 
    return true;
}
 
// Driver code
 
let N = 324;
 
if (isDistinct(N))
    document.write("YES");
else
    document.write("NO");
         
         
// This code is contributed by gfgking
</script>
Producción: 

YES

 

Publicación traducida automáticamente

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