Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Berdasarkan keutamaan nombor, terjemahannya adalah seperti berikut: Seterusnya nombor yang lebih besar berdasarkan keutamaan nombor

Berdasarkan keutamaan nombor, terjemahannya adalah seperti berikut: Seterusnya nombor yang lebih besar berdasarkan keutamaan nombor

王林
王林ke hadapan
2023-08-28 08:45:101182semak imbas

Berdasarkan keutamaan nombor, terjemahannya adalah seperti berikut: Seterusnya nombor yang lebih besar berdasarkan keutamaan nombor

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

Penjelasan

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

Penjelasan

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.

Kaedah

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

  • Kami akan menukar nombor yang diberikan kepada rentetan untuk menggunakan fungsi pilih atur seterusnya padanya.
  • Kami akan mentakrifkan fungsi tersuai yang akan digunakan untuk membandingkan aksara rentetan dalam fungsi pilih atur seterusnya bagi stl
  • Selepas mendapat pilih atur seterusnya, kami akan menukar rentetan kepada integer dan belakang.

  • Terjemahan bahasa Cina bagi

    Contoh

    ialah:
  • Contoh
#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;
}

Output

The next number or permutation for the given number is: 123

Kerumitan Masa dan Ruang

Kerumitan masa kod di atas ialah O(N), dengan N ialah bilangan digit dalam nombor yang diberikan

Kerumitan ruang kod di atas ialah O(N) kerana kami mencipta rentetan baharu untuk menggunakan fungsi pilih atur seterusnya.

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!

Kenyataan:
Artikel ini dikembalikan pada:tutorialspoint.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam