กำหนดหมายเลข n ให้สลับตัวเลขสองหลักใดๆ เพื่อให้จำนวนผลลัพธ์มากกว่าตัวเลข n ถ้าเป็นไปไม่ได้ให้พิมพ์ -1 มาดูตัวอย่างกัน
ป้อนข้อมูล
12345
ผลผลิต
12354
เราได้สลับตัวเลข 4 และ 5 และเราได้ตัวเลขที่สูงกว่าด้วยการสลับหนึ่งครั้ง
อัลกอริทึม
-
ไม่สามารถสร้างตัวเลขได้หากตัวเลขในลำดับที่ลดลง
-
หาดัชนีของตัวเลขจากด้านขวาของตัวเลขที่น้อยกว่าหลักสุดท้าย
-
หาดัชนีของตัวเลขที่มากกว่าหลักก่อนหน้าและน้อยกว่าตัวเลขทั้งหมด
-
สลับสองหลักแล้วคืนหมายเลขใหม่
- คืนหมายเลขใหม่
การนำไปใช้
ต่อไปนี้เป็นการนำอัลกอริธึมข้างต้นไปใช้ใน C++
#include <bits/stdc++.h>
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 << "Given number: " << num << endl;
cout << "Next higher number: " << getNextHigherNumber(num) << endl;
return 0;
} ผลลัพธ์
หากคุณเรียกใช้โค้ดด้านบน คุณจะได้ผลลัพธ์ดังต่อไปนี้
Given number: 12345 Next higher number: 12354