मान लीजिए हमारे पास एक संख्या n है। हमें यह जांचना है कि इस संख्या के सभी सब-नंबर्स (उप-संख्याओं) का डिजिट प्रोडक्ट अद्वितीय (unique) है या नहीं। जैसा कि हम जानते हैं, 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] जो सभी अद्वितीय हैं।
समाधान दृष्टिकोण
हम सभी संभावित सब-स्ट्रिंग्स उत्पन्न करते हैं, प्रत्येक का डिजिट प्रोडक्ट निकालते हैं, और एक सेट में स्टोर करते हैं। यदि कोई डुप्लिकेट मिलता है, तो False लौटाते हैं।
एल्गोरिदम चरण:
dig_prod(digits)फ़ंक्शन परिभाषित करें जो अंकों की सूची का गुणनफल लौटाता है- संख्या को स्ट्रिंग में बदलें, फिर अंकों की सूची बनाएं
- खाली सेट
prod_setबनाएं - प्रत्येक प्रारंभिक इंडेक्स
iऔर अंतिम इंडेक्सj(i से अंत तक) के लिए: - सब-ऐरे
digits[i:j+1]का डिजिट प्रोडक्ट निकालें - यदि यह
prod_setमें पहले से है, तो False लौटाएं - अन्यथा सेट में जोड़ें
- 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(length):
digits[i] = int(num_str[i])
for i in range(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)) # True
इनपुट
235
आउटपुट
True
व्याख्या:
संख्या 235 के लिए:
- सब-नंबर्स: 2, 3, 5, 23, 35, 235
- डिजिट प्रोडक्ट्स: 2, 3, 5, 6, 15, 30
- सभी अद्वितीय हैं ✓