在 C++ 中找到由同一组数字组成的下一个更大的数


在本问题中,我们使用一个数字 N。我们需要使用同一组数字找到下一个更大的数。我们需要找到大于 N 的最小数,且该最小数具有相同的数字。

我们举一个例子来理解这个问题。

输入

N = "92534"

输出

92543

解决方案途径

解决该问题的简单方法是采用以下途径:

  • 从最低有效位遍历数字到最高有效位,当当前元素小于最后一个元素时停止。

  • 然后在剩余数组中搜索最小元素,找到最小数,并用该数字交换该数。

  • 然后对剩余子数组进行排序,并返回输出结果。

说明我们解决方案的运作过程的程序:

示例

 实时演示

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
void findNextGreater(char number[], int n) {
   int i, j;
   for (i = n-1; i > 0; i--)
      if (number[i] > number[i-1])
         break;
   if (i==0) {
      cout<<"Next number is not possible";
      return;
   }
   int x = number[i-1], smallest = i;
   for (j = i+1; j < n; j++)
      if (number[j] > x && number[j] < number[smallest])
         smallest = j;
   char temp = number[smallest];
   number[smallest] = number[i-1];
   number[i-1] = temp;
   sort(number + i, number + n);
   cout<<number;
   return;
}
int main(){
   char number[] = "92534";
   int n = strlen(number);
   cout<<"The next number with same set of digits is ";
   findNextGreater(number, n);
   return 0;
}

输出

The next number with same set of digits is 92543

更新日期: 2021 年 3 月 13 日

1K+ 查看量

开启 职业生涯

完成课程,获得认证

开始学习
广告
© . All rights reserved.