সমস্যা বিবরণ
একটি সংখ্যা N দেওয়া আছে। এর অঙ্কগুলো থেকে ন্যূনতম সংখ্যক অঙ্ক মুছে (হতে পারে ০টিও) সবচেয়ে বড় পারফেক্ট কিউব (সমঘন) সংখ্যা বের করতে হবে। একটি সংখ্যা N পারফেক্ট কিউব হলে N = M³ কোনো পূর্ণসংখ্যা M এর জন্য।
উদাহরণস্বরূপ, ইনপুট 806 হলে আউটপুট হবে 8, কারণ 0 এবং 6 মুছে দিলে 8 পাওয়া যায় যা 2³।
সমাধানের ধাপসমূহ
preProcess(n)ফাংশন সংজ্ঞায়িত করুন:temp_cubesখালি লিস্ট তৈরি করুন।i = 1থেকেceil(n^(1/3))পর্যন্ত লুপ চালান।- প্রতি
iএর জন্যcube = i³হিসাব করুন, স্ট্রিংয়ে রূপান্তর করুন এবংtemp_cubes-এ যোগ করুন। temp_cubesরিটার্ন করুন।
solve(num, temp_cubes)ফাংশন সংজ্ঞায়িত করুন:temp_cubesউল্টে দিন।- প্রতি কিউব স্ট্রিং
tempএর জন্য:index := 0।num-এর প্রতিটি অঙ্কjএর জন্য: যদিnum[j] == temp[index]হয়, তবেindexবাড়ান।- যদি
index == len(temp)হয়, তবেtempরিটার্ন করুন (অর্থাৎ কিউবটিnum-এর সাবসিকোয়েন্স হিসেবে পাওয়া গেল)।
- যদি কোনো কিউব না মিলে,
"Not Possible"রিটার্ন করুন।
- মূল পদ্ধতিতে:
temp_cubes := preProcess(n)।num := str(n)।ans := solve(num, temp_cubes)।ansরিটার্ন করুন।
পাইথন কোড উদাহরণ
import math
def preProcess(n):
temp_cubes = []
for i in range(1, math.ceil(n ** (1. / 3.))):
cube = i ** 3
cubeString = str(cube)
temp_cubes.append(cubeString)
return temp_cubes
def solve(num, temp_cubes):
temp_cubes = temp_cubes[::-1]
totalCubes = len(temp_cubes)
for i in range(totalCubes):
temp = temp_cubes[i]
digitsInCube = len(temp)
index = 0
digitsInNumber = len(num)
for j in range(digitsInNumber):
if num[j] == temp[index]:
index += 1
if digitsInCube == index:
return temp
return "Not Possible"
def getLargestCube(n):
temp_cubes = preProcess(n)
num = str(n)
ans = solve(num, temp_cubes)
return ans
n = 806
print(getLargestCube(n)) # আউটপুট: 8
ইনপুট
806
আউটপুট
8