ในปัญหานี้ เราได้รับองค์ประกอบ N เราจำเป็นต้องค้นหาจำนวนที่มากกว่าถัดไปด้วยตัวเลขชุดเดียวกัน เราต้องหาจำนวนที่น้อยที่สุดที่มีตัวเลขเหมือนกันซึ่งมากกว่า N
มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน
อินพุต
N = "92534"
ผลลัพธ์
92543
แนวทางการแก้ปัญหา
วิธีแก้ปัญหาอย่างง่ายเพื่อค้นหาองค์ประกอบที่ใหญ่กว่าถัดไปคือวิธีการดังต่อไปนี้ −
-
ข้ามผ่านตัวเลขจากบิตที่มีนัยสำคัญน้อยที่สุดไปยังบิตที่มีนัยสำคัญมากที่สุด และหยุดเมื่อองค์ประกอบปัจจุบันมีขนาดเล็กกว่าองค์ประกอบสุดท้าย
-
หลังจากนี้ค้นหาองค์ประกอบที่เล็กที่สุดในอาร์เรย์ที่เหลือ แล้วหาจำนวนที่น้อยที่สุดแล้วสลับกับตัวเลขนั้น
-
จากนั้นจัดเรียงอาร์เรย์ย่อยที่เหลือและส่งคืนเอาต์พุต
โปรแกรมเพื่อแสดงการทำงานของโซลูชันของเรา
ตัวอย่าง
#include <iostream> #include <cstring> #include <algorithm> using namespace std; void findNextGreater(char number[], int n) { int i, j; for (i = n-1; i > 0; i--) if (number[i] > number[i-1]) break; if (i==0) { cout<<"Next number is not possible"; return; } int x = number[i-1], smallest = i; for (j = i+1; j < n; j++) if (number[j] > x && number[j] < number[smallest]) smallest = j; char temp = number[smallest]; number[smallest] = number[i-1]; number[i-1] = temp; sort(number + i, number + n); cout<<number; return; } int main(){ char number[] = "92534"; int n = strlen(number); cout<<"The next number with same set of digits is "; findNextGreater(number, n); return 0; }
ผลลัพธ์
The next number with same set of digits is 92543