在 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