📜  计算给定数组中的Pandigital分数对

📅  最后修改于: 2021-05-13 23:27:09             🧑  作者: Mango

给定数组arr [] ,任务是对数组中的对进行计数,以使arr [i] / arr [j]Pandigital分数

例子:

方法:想法是使用两个嵌套循环在数组的每个可能对上进行迭代,并为每个对将arr [i]arr [j]连接为单个数字,并检查arr [i]arr [j的连接]是以10为底的Pandigital编号,然后是递增计数。

下面是上述方法的实现:

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))


输出:
3

时间复杂度: O(N 2 )
参考: https://mathworld.wolfram.com/PandigitalFraction.html