檢查所有子數字在Python中是否具有不同的數字乘積


假設我們有一個數字n,我們必須檢查這個數字的所有子數字是否具有唯一的數字乘積。眾所周知,n位數有n*(n+1)/2個子數字。例如,135的子數字是1、3、5、13、35、135。數字的數字乘積是其各位數字的乘積。

因此,如果輸入類似於n = 235,則輸出將為True,因為子數字是[2, 3, 5, 23, 35, 235],數字乘積是[2, 3, 5, 6, 15, 30]

為了解決這個問題,我們將遵循以下步驟:

定義一個函式dig_prod()。這將獲取數字

  • 乘積 := 1
  • 對於digits中的每個d,執行
    • 乘積 := 乘積 * d
  • 返回乘積
  • 從主方法執行以下操作
  • num_str := num作為字串
  • 長度 := num_str的大小
  • digits := 一個大小為length的列表,最初所有值都為null
  • prod_set := 一個新的空集合
  • 對於範圍從0到length的i,執行
    • digits[i] := num_str[i]作為整數
  • 對於範圍從0到length - 1的i,執行
    • 對於範圍從i到length - 1的j,執行
      • item := dig_prod(digits[從索引i到j])
      • 如果item在prod_set中,則
        • 返回False
      • 否則,
        • 將item插入prod_set
  • 返回True

讓我們看看下面的實現,以便更好地理解:

示例

 線上演示

def dig_prod(digits):
   product = 1
   for d in digits:
      product *= d
   return product
def solve(num):
   num_str = str(num)
   length = len(num_str)
   digits = [None] * length
   prod_set = set()
   for i in range(0, length):
      digits[i] = int(num_str[i])
   for i in range(0, length):
      for j in range(i, length):
         item = dig_prod(digits[i:j+1])
         if item in prod_set:
            return False
         else:
            prod_set.add(item)
   return True
n = 235
print(solve(n))

輸入

235

輸出

True

更新於:2020年12月30日

177 次瀏覽

開啟您的職業生涯

完成課程後獲得認證

開始學習
廣告
© . All rights reserved.