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

题目描述
功能: 求一个byte数字对应的二进制数字中1的最大连续数,例如3的二进制为00000011,最大连续2个1

输入: 一个byte型的数字

输出: 无

返回: 对应的二进制数字中1的最大连续数
输入描述:
输入一个byte数字
输出描述:
输出转成二进制之后连续1的个数
示例1
输入

3
输出

2

程序实现

  1. import java.util.Scanner;
  2. /**
  3. * 功能: 求一个byte数字对应的二进制数字中1的最大连续数,例如3的二进制为00000011,最大连续2个1
  4. *
  5. * 输入: 一个byte型的数字
  6. *
  7. * 输出: 无
  8. *
  9. * 返回: 对应的二进制数字中1的最大连续数 输入描述: 输入一个byte数字 输出描述: 输出转成二进制之后连续1的个数 示例1 输入
  10. *
  11. * 3 输出
  12. *
  13. * 2
  14. *
  15. */
  16. public class Main {
  17. public static void main(String[] args) {
  18. @SuppressWarnings("resource")
  19. Scanner scanner = new Scanner(System.in);
  20. while (scanner.hasNext()) {
  21. int num = scanner.nextInt();
  22. int result = checkMax(num);
  23. System.out.println(result);
  24. }
  25. }
  26. private static int checkMax(int num) {
  27. int count = 0;
  28. boolean start = false;
  29. int current = 0;
  30. int flag = 1;
  31. while (flag != 0) {
  32. if ((num & flag) != 0) {
  33. if (!start) {
  34. start = true;
  35. current = 1;
  36. } else {
  37. current++;
  38. }
  39. } else {
  40. if (count < current) {
  41. count = current;
  42. }
  43. current = 0;
  44. start = false;
  45. }
  46. flag = (flag << 1);
  47. }
  48. return count;
  49. }
  50. }
时间: 2024-12-14 04:49:27

华为机试-求最大连续bit数的相关文章

华为机试 --- 求最大三位数

题目:输入10位0-9数字,取其中三位不同数字组合,求组合出来的最大三位数. 如输入 1 2 3 4 5 6 7 8 9 0,组合出来987最大. 测试代码如下: #include <stdio.h> #include <stdlib.h> int IsSame(int *a, int num); int main() { int i=0; int j=0; int a[10]={0}; int input =0; int length =0; int temp=0; for (i

[华为机试]求出数组中所有奇数之和以及所有偶数之和

代码: #include <iostream> #include <sstream> #include <fstream> #include <string> int main() { int num[100]; int odd = 0, even = 0; std::string str; getline(std::cin, str); std::stringstream s(str); int j = 0; while(getline(s, str, '

华为机试—求数的平方根立方根

求一个正整数X的平方根Y,立方根Z. 求平方根和立方根我们一般用牛顿迭代法,下面是对应的公式. 平方根迭代公式a(n+1)=(a(n)+Y/a(n))/2,其中Y为待求平方根. 立方根迭代公式a(n+1)={2a(n)+Z/{[a(n)]^2}}/3,其中Z为待求平方根. java import java.util.Scanner; public class cubeSquare { public double sqrt_root(double a, double x0) { double x1

华为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) {

华为机试4[编程题] 删数

[编程题] 删数 有一个数组a[N]顺序存放0~N-1,要求每隔两个数删掉一个数,到末尾时循环至开头继续进行,求最后一个被删掉的数的原始下标位置.以8个数 (N=7)为例:{0,1,2,3,4,5,6,7},0->1->2(删除)->3->4->5(删除)-> 6->7->0(删除),如此循环直到最后一个数被删除. 输入描述: 每组数据为一行一个整数n(小于等于1000),为数组成员数,如果大于1000,则对a[999]进行计算. 输出描述: 一行输出最后一

华为机试—计算麻将的番数(高级题160分)

一.题目如下 二.题目分析 麻将和牌有两种形式,即: 模式1 :11,11,11,11,11,11,11 模式2: 11,123,123,123,123(全部或者部分123可以被111,1111替代) 注:123=连续3张同花色牌,如4D5D6D.111=3张同样的牌,如3T3T3T. 条=T,筒=D 模式1即称之为"巧7对",一组牌刚好是7对牌.但是这里有一个疑问,"对"能否重复,即"杠"能否能当作2"对"(即题目中的&qu

华为机试—输出含“23”的数

输入一行数字:123 423 5645 875 186523 在输入第二行:23 将第一行中含有第二行中"23"的数输出并排序 结果即:123 423 186523 /* 先排序,顺序遍历每个数字,看是否含有23 */ #include<stdio.h> #include<stdlib.h> int cmp(const void *a,const void *b) { return *(int*)a-*(int*)b; } int main(int argc,

2015华为机试——求n!中含有0的个数

题目描述: 求n!中含有0的个数,例如1!= 1 含有0个0,5! = 120 含有1个0,10! = 3628800 含有2个0 解题思路: 这题之前在leetcode中做过,如果先对n进行阶乘运算,然后%10求0的个数.但是n!很有可能溢出,所以需要找到它的等效方法,0的个数即为10的个数,即为5于2的个数,显然在n!中,2的个数要大于5的个数,因此只要算出n范围内有多少个5就OK 代码如下: public static int getZeroCount(int n) { /*在这里实现功能

[华为机试]求出数组中全部奇数之和以及全部偶数之和

代码: #include <iostream> #include <sstream> #include <fstream> #include <string> int main() { int num[100]; int odd = 0, even = 0; std::string str; getline(std::cin, str); std::stringstream s(str); int j = 0; while(getline(s, str, '