Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ตัวเลขที่น้อยกว่าและมากที่สุดที่สร้างได้จากการสลับเพียงครั้งเดียวใน C++

โจทย์

ในบทช่วยสอนนี้ เราจะเขียนโปรแกรมหาตัวเลขที่มากที่สุดด้วยการสลับครั้งเดียวซึ่งน้อยกว่าตัวเลข n ที่กำหนด

มาดูขั้นตอนการแก้ปัญหา

  • กำหนดตัวเลข n
  • วนลูปจากท้ายสตริงและหาดัชนีของหลักที่มากกว่าหลักถัดไป เก็บไว้ในตัวแปร
  • หยุดลูปทันทีที่เจอ
  • วนลูปผ่านตัวเลขจากท้ายสตริงไปยังดัชนีข้างต้น
    • หาดัชนีของหลักที่น้อยกว่าหลักที่ดัชนีข้างต้นและมากที่สุดในพื้นที่นั้น
  • สลับหลักที่สองดัชนีข้างต้น คืนค่าตัวเลขที่อัปเดตแล้ว

ตัวอย่าง

มาดูโค้ดกัน

#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; 
}

ผลลัพธ์

หากคุณรันโค้ดข้างต้น คุณจะได้ผลลัพธ์ดังนี้

54426

สรุป

หากคุณมีคำถามในบทช่วยสอนนี้ ให้กล่าวถึงในส่วนความคิดเห็น