Rumah > pembangunan bahagian belakang > C++ > Rentetan terbesar dari segi leksikografi yang jumlah aksaranya sama dengan N

Rentetan terbesar dari segi leksikografi yang jumlah aksaranya sama dengan N

PHPz
Lepaskan: 2023-09-17 15:45:15
ke hadapan
1372 orang telah melayarinya

Rentetan terbesar dari segi leksikografi yang jumlah aksaranya sama dengan N

Pernyataan Masalah

Kami diberi nombor integer positif. Kita perlu mencari rentetan yang terdiri daripada huruf kecil supaya jumlah semua aksara dalam rentetan adalah sama dengan num, dan rentetan adalah yang terbesar dalam susunan leksikografi. Di sini, ‘a’ = 1, ‘b’ = 2, ‘c’ = 3, ‘d’ = 4, …., ‘z’ = 26.

Kita perlu menggunakan aksara "z" pada permulaan rentetan untuk mencipta rentetan kamus terbesar. Akhir sekali, kita perlu menggunakan aksara terakhir berdasarkan nilai num % 26.

Contoh

Masukkan

num = 30
Salin selepas log masuk

Output

‘zd’
Salin selepas log masuk
Terjemahan bahasa Cina bagi

Penjelasan

ialah:

Explain

‘zd’ ialah rentetan leksikografik terbesar dengan jumlah aksara 30 (z = 26 + d = 4).

Masukkan

3
Salin selepas log masuk

Output

‘c’
Salin selepas log masuk
Terjemahan bahasa Cina bagi

Penjelasan

ialah:

Explain

‘c’ mewakili 3 dirinya.

Masukkan

130
Salin selepas log masuk

Output

‘zzzzz’
Salin selepas log masuk
Terjemahan bahasa Cina bagi

Penjelasan

ialah:

Explain

Jumlah nilai setiap aksara 'zzzzz' ialah 130.

Kaedah 1

Kaedah ini akan menggunakan gelung sementara untuk mencipta rentetan hasil. Kami akan berulang sehingga nombor mempunyai nilai yang lebih besar daripada atau sama dengan 26, pada setiap lelaran kami akan menambah 'z' pada rentetan dan menolak 26 daripada nombor itu. Akhir sekali, kami akan menambah aksara pada rentetan berdasarkan bakinya.

Algoritma

  • Langkah 1 - Jalankan fungsi findString() dengan menghantar nilai angka sebagai parameter.

  • Langkah 2 - Mulakan pembolehubah hasil jenis rentetan dengan rentetan kosong untuk menyimpan rentetan hasil.

  • Langkah 3 - Gunakan gelung sementara untuk lelaran sehingga nilai 'num' lebih besar daripada atau sama dengan 26.

  • Langkah 4 - Dalam gelung while, tambahkan aksara 'z' pada rentetan yang terhasil.

  • Langkah 5 - Tolak 26 daripada nilai nombor.

  • Langkah 6 - Apabila lelaran gelung while selesai, semak sama ada nilai num lebih besar daripada 0. Jika ya, tambahkan aksara terakhir pada rentetan berdasarkan nilai pembolehubah 'num'.

  • Langkah 7 - Kembalikan rentetan hasil.

Terjemahan bahasa Cina bagi

Contoh

ialah:

Contoh

#include <bits/stdc++.h>
using namespace std;

// function to find the resultant string
string findString(int num) {
   // variable to store the resultant string
   string result = "";
   // using a while loop to find the resultant string
   while (num >= 26) {
      // append z to the resultant string
      result += 'z';
      // Decrease the number by 26
      num -= 26;
   }
   // Convert the remaining number to char and append to the resultant string
   if(num != 0) {
      result += char(num + 'a' - 1);
   }
   return result;
}

int main() {
   int num = 96;
   cout << "The resultant string is " << findString(num);
   return 0;
}
Salin selepas log masuk

Output

The resultant string is zzzr
Salin selepas log masuk
  • Kerumitan masa - O(num), kerana gelung while berjalan num/26 kali, yang sama dengan O(num).

  • Kerumitan ruang - O(num), kerana rentetan boleh mengandungi paling banyak (bilangan/26 + 1) aksara.

Kaedah 2

Dalam kaedah ini, kita akan mencipta rentetan panjang N menggunakan pembina String(). Kami akan menggunakan operator modulo dan bahagian untuk mendapatkan jumlah bilangan z dalam rentetan.

Algoritma

  • Langkah 1 - Takrifkan pembolehubah "totalZ" dan mulakan dengan num/26.

  • Langkah 2 - Takrifkan pembolehubah 'rem' dan mulakan dengan 'num%26'.

  • Langkah 3 - Gunakan ini dengan menghantar 'totalZ' sebagai argumen pertama dan 'z' sebagai argumen kedua kepada string() constructor Mencipta rentetan yang mengandungi 'totalZ aksara ''z'. Pada masa yang sama, tambahkannya pada rentetan 'hasil'.

  • Langkah 4 - Jika nilai 'rem' tidak sama dengan 0, tambahkan aksara terakhir pada rentetan berdasarkan nilai pembolehubah 'rem'.

    < /里>
  • Langkah 5 - Kembalikan rentetan 'hasil'.

Terjemahan bahasa Cina bagi

Contoh

ialah:

Contoh

#include <bits/stdc++.h>
using namespace std;
// function to find the resultant string
string findString(int num) {
   // variable to store the resultant string
   string result = "";
   // variable to store the number of z's
   int totalZ = num / 26;
   // variable to store the remainder
   int rem = num % 26;
   // Using the string constructor to create a string with total number of totalZ 'z'.
   result += string(totalZ, 'z');
   // If the remainder is non-zero, then add the corresponding character
   if(rem != 0) {
      result += char(rem + 'a' - 1);
   }
   return result;
}
int main(){
   int num = 52;
   cout << "The resultant string is " << findString(num);
   return 0;
}
Salin selepas log masuk

Output

The resultant string is zz
Salin selepas log masuk
  • Kerumitan masa - O(num) Sebagai pembina rentetan, cipta rentetan yang mengandungi aksara totalz.

  • Kerumitan ruang - O(num)

KESIMPULAN

Kami mempelajari dua cara untuk menukar nombor kepada rentetan. Kami telah menggunakan gelung while dalam kaedah pertama dan pembina string() dalam kaedah kedua. Walau bagaimanapun, kedua-dua kaedah mempunyai kerumitan ruang dan masa yang sama, tetapi kaedah kedua lebih mudah dibaca.

Atas ialah kandungan terperinci Rentetan terbesar dari segi leksikografi yang jumlah aksaranya sama dengan N. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:tutorialspoint.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan