ในบทช่วยสอนนี้ เราจะเขียนโปรแกรมที่หาจำนวนที่มากที่สุดด้วยการสลับเพียงครั้งเดียว
มาดูขั้นตอนการแก้ปัญหากัน
- เริ่มต้นหมายเลข n.
- แปลงจำนวนเต็มเป็นสตริง
- เขียนลูปที่วนซ้ำจากจุดสิ้นสุดของสตริง
- ค้นหาตัวเลขและดัชนีสูงสุด
- หากตัวเลขปัจจุบันน้อยกว่าตัวเลขสูงสุด ให้อัปเดตดัชนีเริ่มต้นด้วยดัชนีปัจจุบันและดัชนีสิ้นสุดด้วยดัชนีตัวเลขสูงสุด
- หากดัชนีเริ่มต้นเป็น -1 ให้คืนค่า n
- หรือสลับตัวเลขในดัชนีเริ่มต้นและสิ้นสุด
- คืนค่าจำนวนเต็มโดยการแปลง
ตัวอย่าง
มาดูโค้ดกันเลย
#include <bits/stdc++.h>
using namespace std;
int getLargestNumber(int n) {
int maxDigit = -1;
int maxDigitIndex = -1;
int startIndex = -1;
int endIndex = -1;
string nInStr = to_string(n);
for (int i = nInStr.size() - 1; i >= 0; i--) {
if (nInStr[i] > maxDigit) {
maxDigit = nInStr[i];
maxDigitIndex = i;
continue;
}
if (nInStr[i] < maxDigit) {
startIndex = i;
endIndex = maxDigitIndex;
}
}
if (startIndex == -1) {
return n;
}
swap(nInStr[startIndex], nInStr[endIndex]);
return stoi(nInStr);
}
int main() {
int n = 678;
cout << getLargestNumber(n) << endl;
return 0;
} ผลลัพธ์
หากคุณเรียกใช้โค้ดด้านบน คุณจะได้ผลลัพธ์ดังต่อไปนี้
876
บทสรุป
หากคุณมีข้อสงสัยใดๆ ในบทแนะนำ โปรดระบุในส่วนความคิดเห็น