मान लीजिए हमें इंटीजर नंबर्स की एक रेंज दी गई है और हमें उस रेंज में विशेष संख्याएं ढूंढनी हैं। एक विशेष संख्या एक पॉजिटिव इंटीजर है जिसके दशमलव प्रतिनिधित्व में केवल 1 अंक होता है। एक संख्या जिसके दशमलव प्रतिनिधित्व में 1 से अधिक अंक होते हैं, वह भी विशेष हो सकती है यदि वह संख्या अपने दशमलव प्रतिनिधित्व में अंकों की संख्या से विभाज्य हो और भागफल मान स्वयं एक विशेष संख्या हो। हम दी गई रेंज (left_limit, right_limit) में विशेष संख्याओं की संख्या लौटाते हैं।
इसलिए, यदि इनपुट left_limit = 5, right_limit = 30 है, तो आउटपुट 13 होगा।
इस रेंज में विशेष संख्याएं हैं: 5, 6, 7, 8, 9, 10, 12, 14, 16, 18, 20, 24, और 28।
समाधान दृष्टिकोण
- यदि right_limit < 10 है, तो सीधे गिनती लौटाएं
- ज्ञात विशेष संख्याओं की बेस लिस्ट से शुरू करें
- अंकों की लंबाई के आधार पर पुनरावर्ती रूप से विशेष संख्याएं जनरेट करें
- डुप्लिकेट हटाएं, सॉर्ट करें और रेंज में गिनें
उदाहरण कार्यान्वयन
def strange(left_limit, right_limit):
if right_limit < 10:
return right_limit - left_limit + 1
len_right = len(str(right_limit))
number_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 16, 18]
for j in range(2, len_right + 1):
for k in number_list:
temp1 = k * j
if len(str(temp1)) == j:
number_list.append(temp1)
elif len(str(temp1)) > j:
break
if number_list[-1] >= right_limit:
break
number_list = list(set(number_list))
count = 0
for temp2 in number_list:
if left_limit <= temp2 <= right_limit:
count += 1
return count
print(strange(5, 30))
इनपुट
5, 30
आउटपुट
13