Cuente los pares de fracciones pandigitales en una array dada

Dada una array arr[] , la tarea es contar los pares en la array de modo que arr[i]/arr[j] sea una fracción pandigital .

Una fracción N/D se llama fracción pandigital si la fracción \frac{N}{D}contiene todos los dígitos del 0 al 9.  
 

Ejemplos:

Entrada: arr = [ 12345, 67890, 123, 4567890 ] 
Salida:
Explicación:
Las fracciones son 12345/67890, 12345/4567890 y 123/4567890 

Entrada: arr = [ 12345, 6789 ] 
Salida:

 

Enfoque: la idea es iterar sobre cada par posible de la array usando dos bucles anidados y para cada par concatenar arr[i] y arr[j] en un solo número y verificar si la concatenación de arr[i] y arr[j ] es un número Pandigital en base 10 y luego incrementa el conteo.

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

Python3

# Python3 implementation of the 
# above approach
  
import math 
  
# Function to concatenate 
# two numbers into one
def numConcat(num1, num2): 
    
     # Find number of digits in num2 
     digits = len(str(num2)) 
    
     # Add zeroes to the end of num1 
     num1 = num1 * (10**digits) 
    
     # Add num2 to num1 
     num1 += num2 
    
     return num1 
       
# Return true if n is pandigit
# else return false.  
def checkPanDigital(n):
    n = str(n)
    b = 10
      
    # Checking length is 
    # less than base  
    if (len(n) < b):  
        return 0;  
    
    hash = [0] * b; 
        
    # Traversing each digit
    # of the number.  
    for i in range(len(n)):  
            
        # If digit is integer  
        if (n[i] >= '0' and \
            n[i] <= '9'):  
            hash[ord(n[i]) - ord('0')] = 1;  
    
        # If digit is alphabet  
        elif (ord(n[i]) - ord('A') <= \
                            b - 11):  
            hash[ord(n[i]) - \
                 ord('A') + 10] = 1;  
    
    # Checking hash array, if any index is  
    # unmarked.  
    for i in range(b):  
        if (hash[i] == 0):  
            return 0;  
    
    return 1; 
  
# Returns true if N is a 
# Pandigital Fraction Number
def isPandigitalFraction(N, D):
    join = numConcat(N, D)
    return checkPanDigital(join)
  
# Returns number pandigital fractions
# in the array
def countPandigitalFraction(v, n) : 
    
    # iterate over all  
    # pair of strings 
    count = 0
    for i in range(0, n) : 
    
        for j in range (i + 1,  
                        n) : 
            
            if (isPandigitalFraction(v[i], 
                             v[j])) : 
                count = count + 1
    return count 
    
  
# Driver Code 
if __name__ == "__main__": 
        
    arr = [ 12345, 67890, 123, 4567890 ] 
    n = len(arr) 
    
    print(countPandigitalFraction(arr, n))
Producción:

3

Complejidad de tiempo: O(N 2 )  
Referencia: https://mathworld.wolfram.com/PandigitalFraction.html
 

Publicación traducida automáticamente

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