ধরুন, একটি সংখ্যা n দেওয়া হয়েছে। আমাদের যাচাই করতে হবে যে এই সংখ্যার সব সাব-নাম্বার (উপ-সংখ্যা) গুলোর ডিজিট প্রোডাক্ট (অঙ্কগুলোর গুণফল) কি ইউনিক (অনন্য)। একটি n-অঙ্কের সংখ্যায় মোট n*(n+1)/2 টি সাব-নাম্বার থাকে। উদাহরণস্বরূপ, ১৩৫-এর সাব-নাম্বার: ১, ৩, ৫, ১৩, ৩৫, ১৩৫।
যেমন, ইনপুট n = 235 হলে আউটপুট হবে True, কারণ সাব-নাম্বার: [2, 3, 5, 23, 35, 235] এবং ডিজিট প্রোডাক্ট: [2, 3, 5, 6, 15, 30] — সবই ইউনিক।
সমাধানের ধাপসমূহ
dig_prod(digits)ফাংশন বানান যা একটি ডিজিট লিস্ট নিয়ে গুণফল ফেরত দেবে।- সংখ্যাকে স্ট্রিং-এ কনভার্ট করুন, তারপর প্রতিটি অঙ্ককে ইন্টিজার-এ কনভার্ট করে
digitsলিস্টে রাখুন। prod_set = set()দিয়ে একটি সেট রাখুন।- দুটি নেস্টেড লুপ দিয়ে সব সাব-অ্যারে (i থেকে j) এর ডিজিট প্রোডাক্ট বের করুন।
- যদি প্রোডাক্ট সেটে থাকে, তবে 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))
ইনপুট
235
আউটপুট
True