在 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
结论
如果您对本教程有任何疑问,请在评论部分提及。