在 C++ 中使用最多一个交换操作的下一个更高的数字
在本教程中,我们将编写一个程序,该程序最多使用一次交换操作来查找下一个更高的数字。
给定一个数字n,交换该数字的任意两位数字,使结果数字大于数字n。如果不可能,则打印-1。
让我们看看解决问题的步骤。
如果数字的数字按降序排列,则无法形成数字。
从数字的右边找出小于最后一位的数字的索引。
找出大于前一个数字且小于所有数字的数字的索引。
交换两位数并返回新号码。
示例
让我们看看代码。
#include输出结果using namespace std; string getNextHigherNumber(string num) { int len = num.size(); int firstDigitIndex = -1; for (int i = len - 2; i >= 0; i--) { if (num[i] < num[len - 1]) { firstDigitIndex = i; break; } } if (firstDigitIndex == -1) { return "-1"; } int secondDigitIndex = -1; for (int i = len - 1; i > firstDigitIndex; i--) { if (num[i] > num[firstDigitIndex]) { if (secondDigitIndex == -1 || num[i] <= num[secondDigitIndex]) { secondDigitIndex = i; } } } char temp = num[firstDigitIndex]; num[firstDigitIndex] = num[secondDigitIndex]; num[secondDigitIndex] = temp; return num; } int main() { string num = "12345"; cout << "给定号码: " << num << endl; cout << "下一个更高的数字: " << getNextHigherNumber(num) << endl; return 0; }
如果你运行上面的代码,那么你会得到下面的结果。
给定号码: 12345 下一个更高的数字: 12354
结论
如果您对本教程有任何疑问,请在评论部分提及。
热门推荐
1 训练狗狗憋尿
2 狗狗追踪训练
3 狗狗训练要多少钱
5 深圳狗狗训练
6 训练狗狗唤回
7 狗狗叫怎么训练
8 狗狗训练班
10 狗狗社会化训练
11 狗狗叫回训练
12 广州狗狗训练学校
13 狗狗训练躺下
14 狗狗随行训练
15 训练狗狗巡回
16 狗狗要怎么训练
17 狗狗喂食训练
18 训练狗狗躺下