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

ตัวเลขที่สูงขึ้นถัดไปโดยใช้การดำเนินการสลับอย่างน้อยหนึ่งครั้งใน C ++


กำหนดหมายเลข n ให้สลับตัวเลขสองหลักใดๆ เพื่อให้จำนวนผลลัพธ์มากกว่าตัวเลข n ถ้าเป็นไปไม่ได้ให้พิมพ์ -1 มาดูตัวอย่างกัน

ป้อนข้อมูล

12345

ผลผลิต

12354

เราได้สลับตัวเลข 4 และ 5 และเราได้ตัวเลขที่สูงกว่าด้วยการสลับหนึ่งครั้ง

อัลกอริทึม

  • ไม่สามารถสร้างตัวเลขได้หากตัวเลขในลำดับที่ลดลง

  • หาดัชนีของตัวเลขจากด้านขวาของตัวเลขที่น้อยกว่าหลักสุดท้าย

  • หาดัชนีของตัวเลขที่มากกว่าหลักก่อนหน้าและน้อยกว่าตัวเลขทั้งหมด

  • สลับสองหลักแล้วคืนหมายเลขใหม่

  • คืนหมายเลขใหม่

การนำไปใช้

ต่อไปนี้เป็นการนำอัลกอริธึมข้างต้นไปใช้ใน C++

#include <bits/stdc++.h>
using namespace std;
string getNextHigherNumber(string num) {
   int len = num.size();
   int firstDigitIndex = -1;
   for (int i = len - 2; i >= 0; i--) {
      if (num[i] < num[len - 1]) {
         firstDigitIndex = i;
         break;
      }
   }
   if (firstDigitIndex == -1) {
      return "-1";
   }
   int secondDigitIndex = -1;
   for (int i = len - 1; i > firstDigitIndex; i--) {
   if (num[i] > num[firstDigitIndex]) {
      if (secondDigitIndex == -1 || num[i] <= num[secondDigitIndex]) {
         secondDigitIndex = i;
         }
      }
   }
   char temp = num[firstDigitIndex];
   num[firstDigitIndex] = num[secondDigitIndex];
   num[secondDigitIndex] = temp;
   return num;
}

int main() {
   string num = "12345";
   cout << "Given number: " << num << endl;
   cout << "Next higher number: " << getNextHigherNumber(num) << endl;
   return 0;
}

ผลลัพธ์

หากคุณเรียกใช้โค้ดด้านบน คุณจะได้ผลลัพธ์ดังต่อไปนี้

Given number: 12345
Next higher number: 12354