Trong hướng dẫn này, chúng ta sẽ viết một chương trình tìm số lớn nhất với một lần hoán đổi nhỏ hơn số n đã cho.
Hãy xem các bước để giải quyết vấn đề.
- Khởi tạo số n.
- Lặp lại từ cuối chuỗi và tìm chỉ số của chữ số lớn hơn chữ số tiếp theo của nó. Lưu trữ nó trong một biến.
- Phá vỡ vòng lặp ngay khi bạn tìm thấy nó.
- Lặp lại số từ cuối chuỗi đến chỉ mục trên.
- Tìm chỉ số của chữ số nhỏ hơn chữ số được lập chỉ mục ở trên và lớn hơn trong số tất cả các chữ số trong khu vực.
-
Hoán đổi các chữ số ở hai chỉ mục trên. Trả lại số đã cập nhật.
Ví dụ
Hãy xem mã.
#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; }
Đầu ra
Nếu bạn chạy đoạn mã trên, thì bạn sẽ nhận được kết quả sau.
54426
Kết luận
Nếu bạn có bất kỳ câu hỏi nào trong hướng dẫn, hãy đề cập đến chúng trong phần bình luận.