Rumah > pembangunan bahagian belakang > C++ > Menggunakan nombor M, kiraan maksimum ialah N, di mana 2 dan 5 dan 6 dan 9 boleh dianggap sama antara satu sama lain

Menggunakan nombor M, kiraan maksimum ialah N, di mana 2 dan 5 dan 6 dan 9 boleh dianggap sama antara satu sama lain

PHPz
Lepaskan: 2023-09-05 16:09:03
ke hadapan
1027 orang telah melayarinya

Menggunakan nombor M, kiraan maksimum ialah N, di mana 2 dan 5 dan 6 dan 9 boleh dianggap sama antara satu sama lain

Kiraan maksimum ialah kiraan maksimum yang mungkin. Di sini, kita diberi integer N dan rentetan integer M. Tugas kita ialah membentuk nombor N menggunakan digit integer M dan mengembalikan kiraan maksimum. Pada masa yang sama, kita boleh memikirkan 2 dan 5 sebagai nombor yang sama, dan 6 dan 9 sebagai nombor yang sama.

Contoh Contoh

Masukkan 1

N = 29
M = "2569783"
Output 1: 2
Salin selepas log masuk

Penjelasan − Oleh kerana 5 dan 2 adalah sama dan 6 dan 9 adalah sama, kita mempunyai dua '2' dan dua '9's. Oleh itu, kiraan maksimum menggunakan digit rentetan M (2596783) untuk membentuk nombor N (29) ialah 2.

Masukkan 2

N = 999
M = 6666925
Output 2: 1
Salin selepas log masuk

Kaedah

Jom bincang kaedah di bawah langkah demi langkah-

  • Pertama, kami akan mencipta fungsi yang dipanggil 'maxCountOfN' yang akan mengambil rentetan 'M' dan nombor 'N' yang diberikan sebagai parameter dan akan mengembalikan integer yang diperlukan 'maxCount' sebagai nilai pulangan.

  • Dalam fungsi ini, kami akan mencipta peta hash 'mp' untuk menyimpan kekerapan setiap nombor dalam rentetan 'M'.

  • Kami mentakrifkan pembolehubah 'len' untuk menyimpan saiz rentetan 'M'.

  • Lintas rentetan 'M' bermula dari indeks 'i = 0' sehingga kurang daripada atau sama dengan 'len', dan lakukan operasi berikut di bawah gelung ini:

    • Jika nombor yang kita dapat ialah '2', kita tukarkan kepada '5'.

    • Jika kita mendapat nombor sebagai '6', kita tukarkannya kepada '9'.

    • Kira kekerapan setiap nombor dalam peta 'mp' sebagai pasangan integer aksara.

  • Buat peta cincang 'mpN' lain untuk menyimpan kekerapan nombor N

  • Gunakan gelung sementara untuk lelaran melalui nombor 'N' sehingga N lebih besar daripada 0, dan lakukan operasi berikut di bawah gelung ini -

    • Buat 'rem' integer untuk menyimpan elemen terakhir nombor

    • Semak sama ada 2 dan tukarkan kepada 5

    • Semak sama ada rem ialah 6 dan tukarkannya kepada 9

    • Kira kekerapan setiap nombor dalam peta 'mpN' sebagai pasangan integer aksara. Iaitu untuk menyimpan integer sebagai aksara dalam peta, seperti 'mpN[rem + '0']'.

    • Kurangkan N kepada N%10 untuk mengeluarkan digit terakhir nombor

  • Kami mencipta pembolehubah 'maxCount' yang menyimpan 'INT_MAX'.

  • Akhir sekali, kami mengulangi peta 'mpN' untuk mencari kiraan maksimum N dan melakukan perkara berikut di bawah gelung ini -

    • Simpan bilangan digit dalam ‘kunci’ pembolehubah

    • Semak sama ada kunci wujud dalam peta rentetan, jika tidak hadir bermakna kita tidak boleh mencipta nombor 'N' menggunakan nombor rentetan 'M', kita kembalikan '0'.

    • Cipta pembolehubah dalam 'tempCount' pembolehubah di mana kita menyimpan nilai (membahagikan kekerapan nombor dalam rentetan M dengan kekerapan nombor semasa dalam N).

    • Dalam maxCount, kami menyimpan nilai minimum tempCount dan maxCount kerana adalah mungkin untuk menjana nombor 'N' hanya jika setiap digit nombor 'N' muncul dalam rentetan 'M'

  • Pulangan maxCount

Terjemahan bahasa Cina bagi

Contoh

ialah:

Contoh

#include <bits/stdc++.h>
using namespace std;
int maxCountOfN(int N, string M){
   map< char, int >mp; //created hashmap to store the frequency of each digit of //string
   int len = M.size(); // getting the size of the string     
   // iterating string using for loop 
   for(int i=0;i<len;i++){
      if(M[i] == '2'){
         M[i] = '5'; // replace 2 with 5
      }
      else if(M[i] == '6'){ 
         M[i] = '9'; // replace 6 with 9
      }
      mp[M[i]]++; //count frequency of digit of string
   }    
   // creating another hashmap to store the frequency of digit of the number N
   map<char, int>mpN;      
   // iterating number 'N' using while loop     
   while(N > 0){
      int rem = N % 10; // Get the last digit as the remainder        
      //Replace 2 with 5
      if(rem == 2){
         rem = 5;
      }
      //Replace 6 with 9
      if(rem == 6){
         rem = 9;
      }        
      mpN[rem + '0']++; //count frequency of digit of number        
      N = N / 10;
   }    
   int maxCount = INT_MAX;
   //Trvaerse the hashmap of the number to get the maxCount
   for(auto el : mpN){
      // Get the key which is a digit from the number N to be formed
      int key = el.first; 
      // If the key is not present in the string M, then the number N cannot be formed
      if (!mp.count(key))
      return 0; 
      // Divide the frequency of the digit from the string M with the frequency of the current digit of N
      int tempCount = mp[key] / el.second; 
      // Choose the minimum
      maxCount = min(maxCount, tempCount);
   }    
   // returning the maximum count 
   return maxCount;
}
// main function 
int main(){    
   int N = 29; // given number
   string M = "2569783";// given string    
   // calling the function to get a maximum count of N 
   int maxCount = maxCountOfN(N, M);   
   cout<<"The max count of making the number "<< N << " using the digits of the string " << M << " is "<< maxCount<<endl;   
   return 0;
}
Salin selepas log masuk

Output

The max count of making the number 29 using the digits of the string 2569783 is 2
Salin selepas log masuk

Kesimpulan

Dalam tutorial ini, kami telah melaksanakan program untuk mencari kiraan Maks N menggunakan digit M supaya 2 dan 5, dan, 6 dan 9 masing-masing boleh dianggap sama Kami telah melaksanakan pendekatan pencincangan seperti yang kami lakukan untuk menyimpan kekerapan dengan kerumitan masa O(N+M) dan kerumitan ruang O(N+M) Di mana M ialah saiz rentetan dan N ialah saiz Nombor.

Atas ialah kandungan terperinci Menggunakan nombor M, kiraan maksimum ialah N, di mana 2 dan 5 dan 6 dan 9 boleh dianggap sama antara satu sama lain. 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