华为OJ平台——求最大连续bit数

题目描述:

  求一个byte数字对应的二进制数字中1的最大连续数,例如3的二进制为00000011,最大连续2个1

输入:

  一个byte型的数字
    
输出:

  对应的二进制数字中1的最大连续数

思路:

  通过移位运算可以一次判断每一位的0、1值,然后通过统计可以得到结果

import java.util.Scanner;

//byte 的范围是-128~127
public class MaxContinueOne {

    public static void main(String[] args) {
        //读入byte类型的整数
        Scanner cin = new Scanner(System.in) ;
        byte num = cin.nextByte() ;
        cin.close() ;

        int max = 0 ;    //记录最大的连续bit位数
        int count = 0 ;  //临时记录当前的连续bit位数
        int temp = 1 ;
        boolean lastFlag = false ;  //记录上一个比特位为0(false)还是1
        //byte类型共8位,所以执行8次就可以了
        for(int i = 0 ; i < 8 ; i++){
            //temp & num 不为0表示当前位为1
            if((temp & num) != 0){
                if(lastFlag){
                    count++ ;
                }else{
                    count = 1 ;
                    lastFlag = true ;
                }
                //将最大的连续bit位数记为max
                max = max > count ? max : count ;
            }else{
                lastFlag = false ;
            }
            //将temp左移一位,进入下一位的比较准备
            temp = temp << 1 ;
        }

        System.out.println(max) ;

    }

}
时间: 2024-08-09 06:23:36

华为OJ平台——求最大连续bit数的相关文章

华为机试-求最大连续bit数

题目描述功能: 求一个byte数字对应的二进制数字中1的最大连续数,例如3的二进制为00000011,最大连续2个1 输入: 一个byte型的数字 输出: 无 返回: 对应的二进制数字中1的最大连续数输入描述:输入一个byte数字输出描述:输出转成二进制之后连续1的个数示例1输入 3输出 2 程序实现 import java.util.Scanner; /** * 功能: 求一个byte数字对应的二进制数字中1的最大连续数,例如3的二进制为00000011,最大连续2个1 * * 输入: 一个b

华为OJ平台——字符串分隔

题目描述: 连续输入字符串,请按长度为8拆分每个字符创 后输出到新的字符串数组: 长度不是8整数倍的字符串请在后面补数字0,空字符串不处理 输入 连续输入字符串(输入两次,每个字符长长度小于100)输出 输出到长度为8,的新字符串数组样例输入 abc 123456789样例输出 abc00000 12345678 90000000 思路: 都是直接处理,没有具体的方法而言 注意点: 华为的OJ平台的输入输出有点坑,好多次的程序都在这里出问题,在Eclipse上运行的结果没问题,然后在OJ上就是编

华为OJ平台——矩阵乘法

题目描述: 如果A是个x行y列的矩阵,B是个y行z列的矩阵,把A和B相乘,其结果将是另一个x行z列的矩阵C. 输入: 1.第一个矩阵的行数 2.第一个矩阵的列数(也是第二个矩阵的行数) 3.第二个矩阵的列数 4.第一个矩阵的值 5.第二个矩阵的值 输出: 输出两个矩阵相乘的结果 样例输入 2 2 2 3 8 8 0 9 0 18 9 样例输出 171 72 72 0 思路: 题目意思很简单,只是实现两个矩阵乘法功能,要注意的一点是输出的格式. OJ平台中对输出的格式非常严格,经过多次尝试,验证此

【华为OJ平台练习题】求最大公共子串的个数和元素

1.原题是求出最大公共子串的个数即可 原理:利用二维矩阵排列的方式,将俩字符串进行比较 #include <iostream> #include <vector> using namespace std; int prcs_2Strs(const char* s1,const char* s2) { int maxSameLength = 0; int L1 = strlen(s1); int L2 = strlen(s2); if(L1==0 || L2==0) //判断字符串是

【华为OJ平台练习题】求最后一个单词长度

//描述 //计算字符串最后一个单词的长度,单词以空格隔开. //知识点 字符串,循环 //运行时间限制 0M //内存限制 0 //输入 //一行字符串,长度小于128. //输出 //整数N,最后一个单词的长度. //样例输入 hello world //样例输出 5 #include <iostream> using namespace std; int countLastWordLength(char *s) { int counter=0; int lg = strlen(s); f

华为OJ平台——杨辉三角的变形

1 import java.util.Scanner; 2 3 /** 4 * 杨辉三角的变形 5 *第一行为1,后面每一行的一个数是其左上角到右上角的数的和,没有的 6 *记为0 7 * 1 8 * 1 1 1 9 * 1 2 3 2 1 10 * 1 3 6 7 6 3 1 11 * 1 4 10 16 19 16 10 4 1 12 * 1 5... 13 *求第x行的第一个偶数是第几个 14 * 15 */ 16 public class YangHui { 17 18 public s

华为OJ平台——查找组成一个偶数最接近的两个素数

1 import java.util.Scanner; 2 3 /** 4 * 问题描述:任意一个偶数(大于2)都可以由2个素数组成,组成偶数的2个素数有很多种情况, 5 * 本题目要求输出组成指定偶数的两个素数差值最小的素数对,其中 5 < n <= 10000 6 * eg:输入20,输出7 13 7 */ 8 public class PrimePair { 9 10 public static void main(String[] args) { 11 Scanner cin = ne

【华为OJ平台练习题】

/* 描述: 输入整型数组和排序标识,对其元素按照升序或降序进行排序 接口说明 原型: void sortIntegerArray(Integer[] pIntegerArray, int iSortFlag); 输入参数: Integer[] pIntegerArray:整型数组 int iSortFlag:排序标识:0表示按升序,1表示按降序 输出参数: 无 返回值: void 输入 1.输入需要输入的整型数个数 2.输入数组组 3.输入排序标识 输出 输出排好序的数字 最后一个无空格 如下

华为OJ平台——放苹果(典型整数划分问题)

题目描述: 输入m,n,分别表示苹果数与盘子的总数,要求输出苹果放在n个盘子的方法总数(注意511和151是一种情况),例如输入 7 3 输出8((7),(6,1),(5,2),(4,3),(5,1,1),(4,2,1),(3,3,1),(3,2,2)) 思路: 最典型的解法整数分解,例如给定n个苹果,把苹果放到k个盘子里,允许有的盘子为空,不妨设 f(n , k ) (边缘条件为当 n = 0 ,1时,返回1,当 k = 1 时,返回1)表示结果,分析一下可以知道有两种放的方法,一种是有空盘,