在 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<<"The Greatest smaller number with same set of digits is "<<N;

   return;
}

int main() {
   
   string N = "654232";
   int size = N.length();
   cout<<"The number is "<<N<<endl;
   calcGreatestSmallerElement(N, size);

   return 0;
}

输出

The number is 654232
The Greatest smaller number with same set of digits is 654223

更新于: 2021年1月25日

260 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告