Нужна помощь с псевдокодом, пожалуйста - PullRequest
0 голосов
/ 18 мая 2011

С учетом двоичного числа рассчитать максимальный блок. Например: Двоичное представление = 11111 Максимальная длина блока = 5

Двоичное представление = 10111011 Максимальная длина блока = 3

Максимальный блок означает количество последовательных 1 или 0. Таким образом, 00010000 будет иметь максимальный блок 4

Выше приведены только два примера, которые дал мой профессор. «Вычислить максимальную длину блока двоичного файла представление. "Это то, что он сказал. Я предполагаю, что это включает в себя также 0. Я действительно не знаю, как это сделать.

Вот что я придумал:

Пусть B = полученное двоичное число. поместите B в A [], каждая цифра представляет элемент. предположим, что A [0] = 1 для А. длина - 1 считать 1 с до тех пор, пока не достигнет нуля max = общее количество 1 с. считать 0 до тех пор, пока не ударил 1 обновить макс при необходимости повторить.

Ответы [ 3 ]

3 голосов
/ 18 мая 2011

Пройдите последовательность, отслеживая:

  • Какой последний номер был

  • Длина текущего блока (который сбрасывается, если последний номер! = Текущий номер)

  • Длина самого длинного блока на данный момент (до текущего блока включительно)

Пограничный случай, с которым вам придется иметь дело, - это первый элемент, который не имеет предшественника, поэтому вам нужно установить для него «последнее число» до того, как вы попадете в цикл, который должен проходить только из второй до конца.

1 голос
/ 18 мая 2011

В 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;
}
0 голосов
/ 20 мая 2011

Так что я понял это. Вот полный код. Это получает пользовательский ввод, преобразует десятичное число в двоичное, подсчитывает максимальный блок 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();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...