📜  余数模2i的最大频率

📅  最后修改于: 2021-05-25 04:04:08             🧑  作者: 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


Javascript


输出:
2