在 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
結論
如果你對本教程有任何疑問,請在評論區中提及。
廣告
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP