📜  余数模2i的最大频率

📅  最后修改于: 2021-04-26 10:14:26             🧑  作者: Mango

给定一个八进制数N ,任务是将数字转换为十进制数,然后以2的幂为单位找到模,即2 i ,使得i> 02 i 并打印模的最大频率。

例子:

方法:通过用数字的二进制表示代替数字来找到数字的二进制表示。现在已知二进制表示中的每个数字都以2的幂递增顺序表示。因此,具有2的幂的数字的模是由其前面的位的二进制表示形式形成的数字。例如,

在此可以看出,当模的二进制表示形式为零时,数量保持不变。因此,模的最大频率将为1 +数字的二进制表示形式中连续0的数量(而不是前导零)。随着模数从2开始,请删除数字的LSB。

下面是上述方法的实现:

C++
// C++ implementation of the approach
#include 
using namespace std;
  
// Binary representation of the digits
const string bin[] = { "000", "001", "010", "011",
                       "100", "101", "110", "111" };
  
// Function to return the maximum frequency
// of s modulo with a power of 2
int maxFreq(string s)
{
  
    // Store the binary representation
    string binary = "";
  
    // Convert the octal to binary
    for (int i = 0; i < s.length(); i++) {
        binary += bin[s[i] - '0'];
    }
  
    // Remove the LSB
    binary = binary.substr(0, binary.length() - 1);
  
    int count = 1, prev = -1, i, j = 0;
  
    for (i = binary.length() - 1; i >= 0; i--, j++)
  
        // If there is 1 in the binary representation
        if (binary[i] == '1') {
  
            // Find the number of zeroes in between
            // two 1's in the binary representation
            count = max(count, j - prev);
            prev = j;
        }
  
    return count;
}
  
// Driver code
int main()
{
    string octal = "13";
  
    cout << maxFreq(octal);
  
    return 0;
}


Java
// Java implementation of the approach
class GFG
{
  
// Binary representation of the digits
static String bin[] = { "000", "001", "010", "011",
                        "100", "101", "110", "111" };
  
// Function to return the maximum frequency
// of s modulo with a power of 2
static int maxFreq(String s)
{
  
    // Store the binary representation
    String binary = "";
  
    // Convert the octal to binary
    for (int i = 0; i < s.length(); i++) 
    {
        binary += bin[s.charAt(i) - '0'];
    }
  
    // Remove the LSB
    binary = binary.substring(0, 
             binary.length() - 1);
  
    int count = 1, prev = -1, i, j = 0;
  
    for (i = binary.length() - 1; 
         i >= 0; i--, j++)
  
        // If there is 1 in the binary representation
        if (binary.charAt(i) == '1')
        {
  
            // Find the number of zeroes in between
            // two 1's in the binary representation
            count = Math.max(count, j - prev);
            prev = j;
        }
    return count;
}
  
// Driver code
public static void main(String []args)
{
    String octal = "13";
  
    System.out.println(maxFreq(octal));
}
}
  
// This code is contributed by 29AjayKumar


Python3
# Python3 implementation of the approach 
  
# Binary representation of the digits 
bin = [ "000", "001", "010", "011", 
        "100", "101", "110", "111" ]; 
  
# Function to return the maximum frequency 
# of s modulo with a power of 2 
def maxFreq(s) :
  
    # Store the binary representation 
    binary = ""; 
  
    # Convert the octal to binary 
    for i in range(len(s)) :
        binary += bin[ord(s[i]) - ord('0')]; 
      
    # Remove the LSB 
    binary = binary[0 : len(binary) - 1]; 
  
    count = 1; prev = -1;j = 0; 
  
    for i in range(len(binary) - 1, -1, -1) :
  
        # If there is 1 in the binary representation 
        if (binary[i] == '1') :
  
            # Find the number of zeroes in between 
            # two 1's in the binary representation 
            count = max(count, j - prev); 
            prev = j;
          
        j += 1;
  
    return count; 
  
# Driver code 
if __name__ == "__main__" : 
  
    octal = "13"; 
  
    print(maxFreq(octal)); 
  
# This code is contributed by AnkitRai01


C#
// C# implementation of the approach
using System;
                      
class GFG
{
  
// Binary representation of the digits
static String []bin = { "000", "001", "010", "011",
                        "100", "101", "110", "111" };
  
// Function to return the maximum frequency
// of s modulo with a power of 2
static int maxFreq(String s)
{
  
    // Store the binary representation
    String binary = "";
  
    // Convert the octal to binary
    for (int K = 0; K < s.Length; K++) 
    {
        binary += bin[s[K] - '0'];
    }
  
    // Remove the LSB
    binary = binary.Substring(0, 
             binary.Length - 1);
  
    int count = 1, prev = -1, i, j = 0;
  
    for (i = binary.Length - 1; 
         i >= 0; i--, j++)
  
        // If there is 1 in the binary representation
        if (binary[i] == '1')
        {
      
            // Find the number of zeroes in between
            // two 1's in the binary representation
            count = Math.Max(count, j - prev);
            prev = j;
        }
    return count;
}
  
// Driver code
public static void Main(String []args)
{
    String octal = "13";
  
    Console.WriteLine(maxFreq(octal));
}
}
  
// This code is contributed by 29AjayKumar


输出:
2