Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

ตรวจสอบว่าหมายเลขย่อยทั้งหมดมีผลิตภัณฑ์ Digit ที่แตกต่างกันใน 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
  • สำหรับแต่ละ d ในหลัก ทำ
    • ผลิตภัณฑ์ :=ผลิตภัณฑ์ * d
  • คืนสินค้า
  • จากวิธีหลัก ให้ทำดังนี้:
  • num_str :=num เป็นสตริง
  • ความยาว :=ขนาดของ num_str
  • หลัก :=รายการความยาวขนาด และเริ่มต้นค่าทั้งหมดเป็นโมฆะ
  • prod_set :=ชุดว่างใหม่
  • สำหรับฉันในช่วง 0 ถึงความยาว ทำ
    • หลัก[i] :=num_str[i] เป็นจำนวนเต็ม
  • สำหรับฉันในช่วง 0 ถึงความยาว - 1 ทำ
    • สำหรับ j ในช่วง i ถึงความยาว - 1 ทำ
      • item :=dig_prod(ตัวเลข[จากดัชนี i ถึง j])
      • ถ้ารายการอยู่ใน prod_set แล้ว
        • คืนค่าเท็จ
      • มิฉะนั้น
        • แทรกรายการลงใน 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