在 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.