Dalam sistem nombor biasa, 0 ialah nombor terkecil dan 9 ialah nombor terbesar. Dalam masalah ini kita akan mendapat senarai panjang 10, dari indeks 0 hingga indeks 9 mewakili nombor yang mewakili keutamaan nombor itu, senarai itu akan dalam susunan yang semakin meningkat yang bermaksud nombor yang muncul pada indeks terakhir mempunyai keutamaan Tertinggi. Kami juga akan diberikan nombor dan kami perlu mencari nombor seterusnya yang lebih besar sedikit daripada nombor semasa.
Input 1: Given number = “123” Given array = { 9, 2, 3, 6, 8, 1, 0, 5, 4, 7} Output: 132
Daripada tatasusunan keutamaan yang diberikan, kita dapat melihat bahawa 1 mempunyai keutamaan yang lebih besar daripada 2 dan 3. 3 mempunyai keutamaan yang lebih tinggi daripada 2. Jadi jika pilih atur seterusnya bagi nombor tertentu akan dicapai dengan menukar 2 dan 3.
Input 2: Given number = 132 Given array = { 9, 2, 3, 6, 8, 1, 0, 5, 4, 7} Output: 132
Dari tatasusunan keutamaan yang diberikan, kita dapat melihat bahawa keutamaan 1 adalah lebih besar daripada kedua-dua 2 dan 3. Keutamaan 3 adalah lebih besar berbanding dengan 2. Jadi, tiada pilih atur seterusnya tersedia.
Dalam pendekatan ini, kami akan menggunakan konsep perpustakaan templat standard (STL) yang disediakan oleh bahasa pengaturcaraan C++ untuk mendapatkan pilih atur seterusnya Mari kita lihat langkah-langkah −
Pertama, kita akan mendapat nombor nombor seterusnya, dan tatasusunan yang mewakili keutamaan nombor dalam tertib menaik.
Kami akan memanggil fungsi yang telah ditetapkan untuk mencari nombor seterusnya yang lebih besar daripada nombor yang diberikan semasa.
Kami akan mentakrifkan fungsi yang mengambil parameter nombor dan tatasusunan
Kami akan menentukan tatasusunan global dan menyimpan keutamaan setiap digit yang diambil daripada tatasusunan yang diberikan untuk digunakan kemudian
Selepas mendapat pilih atur seterusnya, kami akan menukar rentetan kepada integer dan belakang.
Contoh
ialah:#include <bits/stdc++.h> using namespace std; // priority array or array in which the priority of each digit will be stored int prio[10]; // defining the compare function bool compare(char& a, char& b){ return prio[a-'0'] < prio[b-'0']; } // function to get the next permuatation int nextNum(int n, int arr[]){ for(int i=0; i<10; i++){ prio[arr[i]] = i; } // converting the given number into string string str = to_string(n); // calling the next permuatation stl function for the given string we will compare by custom function bool cur = next_permutation(str.begin(),str.end(),compare); if(cur == false){ // indicating the next permutation does not exist return n; } n = stoi(str); // converting string back to number return n; } int main(){ int n = 312; // the given number int arr[] = {9, 2, 3, 6, 8, 1, 0, 5, 4, 7}; // given array cout<<"The next number or permutation for the given number is: "<<nextNum(n, arr); return 0; }
The next number or permutation for the given number is: 123
Nota
: Jika nombor semasa ialah nombor yang lebih besar antara semua pilih atur maka fungsi pilih atur seterusnya akan kembali palsu dan kami akan mengembalikan nombor yang sama kerana pilih atur seterusnya tidak wujud.Kesimpulan
Dalam tutorial ini kami melaksanakan kod untuk mencari nombor seterusnya yang lebih besar daripada nombor semasa tetapi keutamaan nombor tidak mengikut urutan dari 0 hingga 9 tetapi diberikan dalam tatasusunan yang berasingan. Kami menggunakan fungsi STL next_permutation dan fungsi tersuai untuk mendapatkan nombor seterusnya berdasarkan keutamaan baharu. Kerumitan masa dan ruang kod di atas ialah O(bilangan digit).
Atas ialah kandungan terperinci Berdasarkan keutamaan nombor, terjemahannya adalah seperti berikut: Seterusnya nombor yang lebih besar berdasarkan keutamaan nombor. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!