在 C++ 中仅使用一次交换操作即可得到的最大的较小数字


在本教程中,我们将编写一个程序,该程序可找到比给定数字 n 小、且仅通过一次交换即可得到的最大数字。

让我们看一下解决此问题的步骤。

  • 初始化数字 n。
  • 从字符串末尾开始迭代,并找出大于其后一位数字的数字的索引。将其存储在变量中。
  • 一旦找到,则停止循环。
  • 从字符串末尾到上述索引对数字进行迭代。
    • 找出小于上述索引数字且在此区域中更大的数字的索引。
  • 在上述两个索引处交换数字。返回更新后的数字。

示例

让我们看看代码。

 实时演示

#include <bits/stdc++.h>
using namespace std;
string getTheNumber(string str) {
   int length = str.length();
   int index = -1;
   for (int i = length - 2; i >= 0; i--) {
      if (str[i] > str[i+1]) {
         index = i;
         break;
      }
   }
   int smallerDigitIndex = -1;
   for (int i = length - 1; i > index; i--) {
      if (str[i] < str[index]) {
         if (smallerDigitIndex == -1 || str[i] >= str[smallerDigitIndex]) {
            smallerDigitIndex = i;
         }
      }
   }
   if (index == -1) {
      return "-1";
   }
   if (smallerDigitIndex != -1) {
      swap(str[index], str[smallerDigitIndex]);
      return str;
   }
   return "-1";
}
int main() {
   string str = "54624";
   cout << getTheNumber(str) << endl;
   return 0;
}

输出

如果运行以上代码,则会得到以下结果。

54426

结论

如果你对本教程有任何疑问,请在评论区中提及。

更新于:2021 年 4 月 9 日

134 次浏览

开启你的 职业生涯

完成该课程获取认证

开始
广告
© . All rights reserved.