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

บทสรุป

หากคุณมีข้อสงสัยใดๆ ในบทแนะนำ โปรดระบุในส่วนความคิดเห็น