ในปัญหานี้ เราได้รับสตริง N ที่แทนตัวเลข งานของเราคือ หาจำนวนที่มากที่สุดที่น้อยกว่า N ด้วยชุดตัวเลขเดียวกัน
คำอธิบายปัญหา: เราจำเป็นต้องค้นหาตัวเลขโดยใช้ตัวเลขทั้งหมดของตัวเลขที่ระบุซึ่งมีจำนวนน้อยที่สุดที่น้อยกว่า N
มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน
ป้อนข้อมูล: ไม่มี =“54314”
ผลลัพธ์: 54341
แนวทางการแก้ปัญหา
วิธีแก้ปัญหาอย่างง่ายคือการหาตัวเลขของตัวเลขซึ่งสามารถย้ายเพื่อหาจำนวนที่น้อยที่สุดได้ ตอนนี้ จำนวนควรจะมากกว่าความสำเร็จที่ถูกต้องเพื่อแก้ไขจุดประสงค์
สำหรับสิ่งนี้ เราจะสำรวจรูปแบบตัวเลขจากขวาไปซ้ายและค้นหาองค์ประกอบที่มากกว่าองค์ประกอบสุดท้าย
จากนั้นค้นหาองค์ประกอบที่ยิ่งใหญ่ที่สุดในอาร์เรย์ย่อยด้านขวา และแทนที่ด้วยองค์ประกอบปัจจุบัน หลังจากการเรียงลำดับ subarray จะเรียงลำดับจากมากไปน้อย นี่จะเป็นองค์ประกอบที่เล็กที่สุดของคุณ
โปรแกรมเพื่อแสดงการทำงานของโซลูชันของเรา
ตัวอย่าง
#include <bits/stdc++.h>
using namespace std;
void calcGreatestSmallerElement(string N, int size) {
int i, j;
for (i = size - 1; i > 0; i--)
if (N[i] < N[i - 1])
break;
if (i == 0) {
cout << "Previous number is not possible";
return;
}
int x = N[i - 1], greatest = i;
for (j = i; j < size; j++)
if (N[j] < x && N[j] > N[greatest])
greatest = j;
swap(N[greatest], N[i - 1]);
sort(N.begin() + i, N.begin() + size, greater<char>());
cout<<"The Greatest smaller number with same set of digits is "<<N;
return;
}
int main() {
string N = "654232";
int size = N.length();
cout<<"The number is "<<N<<endl;
calcGreatestSmallerElement(N, size);
return 0;
} ผลลัพธ์
The number is 654232 The Greatest smaller number with same set of digits is 654223