需要帮助伪代码请

时间:2011-05-18 01:03:15

标签: binary pseudocode

给定二进制数计算最大块数。 例如: 二进制表示= 11111 最大块长度= 5

二进制表示= 10111011 最大块长度= 3

max block表示连续1或0的数量。所以00010000的最大块数为4

以上是我教授给出的唯一两个例子。 “计算二进制文件的最大块长度 “这就是他说的。我假设这也包括0。我真的不知道如何去做。

这就是我的想法:

设B =收到的二进制数。 将B放入A [],每个数字代表一个元素。 假设A [0] = 1 对于A.length - 1 只要没有达到零就算1秒 max =总计数为1秒。 只要没有命中1就算0 必要时更新max 重复。

3 个答案:

答案 0 :(得分:3)

完成序列,跟踪:

  • 最后一个号码

  • 当前程序段的长度(如果最后一个数字会被重置!=当前数字)

  • 到目前为止最长的块的长度(直到并包括当前块)

你需要处理的边缘情况是第一个没有前任的元素,所以你必须在你进入循环之前设置第一个'最后一个数字',这应该只是从第二个到最后。

答案 1 :(得分:1)

在C中,我会这样做

int maxblock( unsigned int binary_val )
{
    int max_block = 0;
    int cur_block = 0;
    unsigned int prev_bit = 0;
    unsigned int mask = 1;
    int count = 0;
    for( count = 0; count < (sizeof(int)*8); count++ )
    {
        unsigned int this_bit = binary_val & mask;
        if( this_bit && prev_bit )
            cur_block++;
        else if( !this_bit && !prev_bit )
            cur_block++;
        else
        {
            if( cur_block > max_block )
                max_block = cur_block;
            cur_block = 1;
        }
        prev_bit = this_bit;
        mask = mask << 1;
    }
    if( cur_block > max_block )
        max_block = cur_block;
    return max_block;
}

答案 2 :(得分:0)

所以我明白了。这是完整的代码。这将获取用户输入,将十进制数转换为二进制数,计算最大1的块数并计算总数1。还有一个小错误,如果输入0并且程序应该正常工作,则应该接受输入,但它没有。

import java.util.Scanner;

public class Test 
{
    private static int decimalNumber = 0;
    private static String binaryNumber = "";
    // Get user input and return it
    // Check to make sure the input received is >= 0
    // If not > 0 then ask for input again
    private static void getInput()
    {
        Scanner sc = new Scanner(System.in); // Scanner to get user input
        System.out.println("Please type in a number >= 0"); // Tells user to type a number > 0
        decimalNumber = sc.nextInt(); // Stores the input in decimalNumber
        if(decimalNumber < 0)   // Loop to make sure input received is > 0
        {
            System.out.println("Incorrect input received"); // Tells the user input received was incorrect.
        }
    }

    private static void toBinary() 
    {
        while (decimalNumber != 0) 
        {
            if (binaryNumber.length() % 5 == 0) 
            {
                binaryNumber = "" + binaryNumber;
            }
            binaryNumber = (decimalNumber % 2) + binaryNumber;
            decimalNumber /= 2;
        }
        System.out.println("Binary representation = " + binaryNumber);
    }

    public static void countOnes()
    {
        int ones = 0;
        for(int i=0; i < binaryNumber.length(); i++)
        {
            if(binaryNumber.charAt(i) == '1')
            {
                ones++;
            }
        }
        System.out.println("No. of 1’s in the binary representation = " + ones);
    }

    public static void maximumBlock()
    {
        int block = 0;
        int maxBlock = 0;
        for(int i=0; i < binaryNumber.length(); i++)
        {
            if((binaryNumber.charAt(i) == '1') && (i < binaryNumber.length()))
            {
                block++;
                if(maxBlock < block)
                {
                    maxBlock = block;
                }
            }
            else
            {
                block = 0;
            }
        }
        System.out.println("Maximum block length = " + maxBlock);
    }

    public static void main(String[] args)
    {
        getInput();
        toBinary();
        countOnes();
        maximumBlock();
    }
}