สมมติว่าเรามีตัวเลข 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
- สำหรับ j ในช่วง i ถึงความยาว - 1 ทำ
- คืนค่า 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