কনসেপ্ট
দেওয়া সংখ্যা N থেকে ন্যূনতম ডিজিট ডিলিট করে (হয় ০) সর্বোচ্চ পারফেক্ট কিউব বের করুন। যেকোনো ডিজিট ডিলিট করা যাবে।
Aকে পারফেক্ট কিউব বলা হয় যদি A = B³ কিছু পূর্ণসংখ্যা B-এর জন্য।
যদি কোনো পারফেক্ট কিউব তৈরি করা না যায়, -1 প্রিন্ট করুন।
উদাহরণ
N = 1025 হলে, ০ ডিলিট করলে ১২৫ পাওয়া যায় যা ৫³ (৫×৫×৫=১২৫)।
N = 806 হলে, ০ এবং ৬ ডিলিট করলে ৮ পাওয়া যায় যা ২³ (২×২×২=৮)।
পদ্ধতি
সংখ্যার সব সাবসিকোয়েন্স চেক করুন কিউব কিনা এবং ম্যাক্সিমাম কিউব খুঁজুন। সাবস্ট্রিং তৈরি করতে লাস্ট ক্যারেক্টার ডিলিট করে রিকার্সন করুন।
যেমন num = "876" হলে সাবসিকোয়েন্সগুলো: 8, 87, 876, 86, 7, 76, 6।
উদাহরণ
#include <bits/stdc++.h>
using namespace std;
#define ll long long
ll mx1 = INT_MIN;
bool is_Cube(ll x1){
int found = 0;
for (int i = 2; i <= (x1 / 2); i++){
if (x1 % i == 0){
if ((i * i * i) == x1)
found = 1;
}
}
if (found == 1)
return true;
else
return false;
}
void printSubSeqRec(string str, int n1, int index = -1, string curr1 = ""){
if (index == n1)
return;
if (curr1 != ""){
ll temp = stoi(curr1);
if (is_Cube(temp))
mx1 = max(mx1, temp);
}
for (int i = index + 1; i < n1; i++){
curr1 += str[i];
printSubSeqRec(str, n1, i, curr1);
curr1 = curr1.erase(curr1.size() - 1);
}
return;
}
int main(){
int nums1 = 1025;
string str1 = to_string(nums1);
printSubSeqRec(str1, str1.size());
if (mx1 != INT_MIN)
cout << mx1;
else
cout << "NOT FOUND ANY CUBE";
return 0;
} আউটপুট
125