在C ++中找到小于N且具有相同数字集的最大数字

在这个问题中,我们得到了一个代表数字的字符串N。我们的任务是找到具有相同数字集的小于N的最大数字。 

 问题描述: 我们需要使用给定数字的所有数字找到一个数字,该数字是最大的小于N的数字。

让我们举个例子来了解这个问题, 

输入:  N =“ 54314”

输出:  54341

解决方法

解决此问题的简单方法是找到可以移动以找到最大的较小数字的数字。现在,该数目应该大于其正确的成功数目以解决目的。

为此,我们将从右到左遍历数字形式,并找到大于最后一个元素的元素。

然后在右边的子数组中找到最大的元素,并将其替换为当前元素。排序后,子数组是降序排列。这将是您最大的较小元素。

该程序说明了我们解决方案的工作原理,

示例

#include <bits/stdc++.h>
using namespace std;

void calcGreatestSmallerElement(string N, int size) {
   
   int i, j;
   for (i = size - 1; i > 0; i--)
      if (N[i] < N[i - 1])
         break;

   if (i == 0) {
      cout << "Previous number is not possible";
      return;
   }

   int x = N[i - 1], greatest = i;
   for (j = i; j < size; j++)
      if (N[j] < x && N[j] > N[greatest])
         greatest = j;

   swap(N[greatest], N[i - 1]);
   sort(N.begin() + i, N.begin() + size, greater<char>());

   cout<<"具有相同数字集的最大较小数是 "<<N;

   return;
}

int main() {
   
   string N = "654232";
   int size = N.length();
   cout<<"这个数字是 "<<N<<endl;
   calcGreatestSmallerElement(N, size);

   return 0;
}
输出结果
这个数字是 654232
具有相同数字集的最大较小数是 654223