首頁 >後端開發 >C++ >使用M的數字,最大計數為N,其中2和5以及6和9可以互相視為相同

使用M的數字,最大計數為N,其中2和5以及6和9可以互相視為相同

PHPz
PHPz轉載
2023-09-05 16:09:031018瀏覽

使用M的數字,最大計數為N,其中2和5以及6和9可以互相視為相同

Max count是一個可能的最大計數。在這裡,我們給了一個整數N和一個整數M的字串。我們的任務是使用整數M的數字來組成數字N,並傳回最大計數。同時,我們可以將2和5視為同一個數字,將6和9視為同一個數字。

範例範例

輸入 1

N = 29
M = "2569783"
Output 1: 2

解釋 − 因為5和2相同,6和9相同,所以我們有兩個'2'和兩個'9'。因此,使用字串M(2596783)的數字來組成數字N(29)的最大計數是2。

輸入2

N = 999
M = 6666925
Output 2: 1

方法

讓我們逐步討論下面的方法-

  • 首先,我們將建立一個名為'maxCountOfN'的函數,該函數將以給定的字串'M'和數字'N'作為參數,並將傳回所需的整數'maxCount'作為返回值。

  • 在該函數中,我們將建立一個雜湊映射 'mp' 來儲存字串 'M' 中每個數字的頻率。

  • 我們定義一個變數‘len’來儲存字串‘M’的大小。

  • 從索引‘i = 0’開始遍歷字串‘M’,直到小於等於‘len’,並在此循環下執行以下操作:

    • 如果我們得到的數字是‘2’,我們將其轉換為‘5’。

    • 如果我們得到一個數字為‘6’,我們將其轉換為‘9’。

    • 統計'mp'映射中每個數字的頻率作為字元-整數對。

  • 建立另一個哈希映射 'mpN' 以儲存數字 N 的頻率

  • 使用while循環遍歷數字‘N’,直到N大於0,並在此循環下執行以下操作 -

    • 建立一個整數‘rem’來儲存數字的最後一個元素

    • 檢查是否為2並將其轉換為5

    • 檢查 rem 是否為 6 並將其轉換為 9

    • 將'mpN'映射中每個數字的頻率計數為字元-整數對。即將整數作為字元儲存在映射中,如'mpN[rem '0']'。

    • 將 N 減少到 N ,以移除數字的最後一位

  • 我們建立一個變數 'maxCount',其中儲存 'INT_MAX'。

  • 最後,我們遍歷地圖 'mpN' 來找到 N 的最大計數,並在此循環下執行以下操作 -

    • #在變數‘key’中儲存數字的位數

    • 檢查鍵是否存在於字串的映射中,如果不存在意味著我們無法使用字串'M'的數字創建數字'N',我們返回'0'。

    • 在變數'tempCount'中建立一個變量,我們將值儲存在其中(將字串M中的數字頻率除以N的目前數字頻率)。

    • 在maxCount中,我們儲存tempCount和maxCount的最小值,因為只有當數字'N'的每個數字都出現在字串'M'中時,才可能產生數字'N'

  • Return maxCount

#Example

的中文翻譯為:

範例

#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;
}

輸出

The max count of making the number 29 using the digits of the string 2569783 is 2

結論

In this tutorial, we have implemented a program to find the Max count of N using digits of M such that 2 and 5, and, 6 and 9 can be treated as the same respectively. We have impleed an approach of hashtively we have to store the frequency with the time complexity of O(N M) and space complexity of O(N M). Where M is the size of the string and N is the size of the Number.

以上是使用M的數字,最大計數為N,其中2和5以及6和9可以互相視為相同的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:tutorialspoint.com。如有侵權,請聯絡admin@php.cn刪除