检查所有子数字在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 次浏览

开启您的职业生涯

完成课程后获得认证

开始学习
广告