在C ++中仅使用一次交换操作就可能获得尽可能大的小数
在本教程中,我们将编写一个程序,该程序查找一次交换的最大数目,该数目小于给定数目n。
让我们看看解决问题的步骤。
初始化数字n。
从字符串的末尾进行迭代,找到大于下一个数字的数字的索引。将其存储在变量中。
一旦找到它就中断循环。
从字符串的末尾到上面的索引遍历数字。
找到该数字的索引,该数字要比上面的索引数字小,并且在该区域的所有数字中要大。
交换上面两个索引处的数字。返回更新的number。
示例
让我们看一下代码。
#includeusing 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
热门推荐
10 朋友新年祝福语大全 简短
11 新年祝福语简短大方兔年
12 搬新家礼物祝福语简短
13 同学见面花束祝福语简短
14 五一假期祝福语幽默简短
15 离职欢送敬酒祝福语简短
16 对学弟的祝福语简短
17 考老师辞职祝福语简短
18 祝福语驱散霉运的话简短