给定二进制数计算最大块数。 例如: 二进制表示= 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 重复。
答案 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();
}
}