查找通过从C ++中的数字中删除最小位数而形成的最大多维数据集

概念

对于给定的数字N,我们的任务是确定可以通过从数字中删除最小数字(可能为0)来形成的最大正方体。因此,可以从给定数字中删除任何数字以达到目标。

如果某整数B的A = B ^ 3,则A被称为理想立方体。

已经看到,如果该数字不能为完美的立方体,则打印-1。

令N =1025。已经看到,如果从上述数字中删除0,我们将得到125作为剩余数字,这是5(5 * 5 * 5 = 125)的立方根。

令N =806。已经看到,如果我们删除0和6,那么我们将有8作为剩余数,即2的立方根(2 * 2 * 2 = 8)

方法

我们必须检查数字的每个子序列,检查数字是否为立方,然后将其与其中的最大立方进行比较。为了创建所有子字符串,我们删除最后一个字符,以便可以创建下一个排列。

所以我们有一个数字num =“ 876”,之后我们将每个元素添加到当前字符串中,这将使我们-

8

87

876

此后,递归将返回“ 87”,然后删除“ 7”,将调用下一个迭代,将给出子序列“ 86”。因此,这将完成对“ 8”的递归,子序列将从“ 7”开始,这将在“ 6”之后给出“ 7”和“ 76”。

结果,这将给出给定数字876的所有子序列。

示例

#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

以上是 查找通过从C ++中的数字中删除最小位数而形成的最大多维数据集 的全部内容, 来源链接: utcz.com/z/338422.html

回到顶部