ในบทช่วยสอนนี้ เราจะเขียนโปรแกรมที่หาจำนวนที่มากที่สุดด้วยการสลับเพียงครั้งเดียว
มาดูขั้นตอนการแก้ปัญหากัน
- เริ่มต้นหมายเลข 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
บทสรุป
หากคุณมีข้อสงสัยใดๆ ในบทแนะนำ โปรดระบุในส่วนความคิดเห็น