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

ค้นหาจำนวนที่มากขึ้นถัดไปด้วยชุดหลักเดียวกันใน C++


ในปัญหานี้ เราได้รับองค์ประกอบ 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