牛客 求最大连续bit数,二进制插入,查找组成一个偶数最接近的两个素数
发布日期:2021-05-14 17:06:02 浏览次数:21 分类:精选文章

本文共 1892 字,大约阅读时间需要 6 分钟。

题目一:求最大连续bit数

题目描述

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

解题思路

要解决这个问题,可以通过位运算来实现。具体步骤如下:

  • 从最低位开始,逐位检查每一位是否为1。
  • 如果当前位是1,计数器加1。
  • 如果当前位不是1,则重置计数器为0。
  • 在整个过程中,记录最大的计数值。
  • 解决代码

    import java.util.Scanner;
    public class Main {
    public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
    while (scan.hasNext()) {
    int n = scan.nextInt();
    int count = 0;
    while (n != 0) {
    if ((n & 1) == 1) {
    count++;
    } else {
    count = 0;
    }
    n >>= 1;
    }
    System.out.println(count);
    }
    }
    }

    题目二:二进制插入

    题目描述

    给定两个32位整数n和m,同时给定i和j,将m的二进制数位插入到n的二进制的第j到第i位,保证n的第j到第i位均为零,且m的二进制位数小于等于i-j+1。

    解题思路

    要实现这个操作,可以按照以下步骤进行:

  • 将m右移j位,使其插入位置对齐。
  • 将m与n进行按位或运算,从而将m的二进制数插入到n的指定位置。
  • 解决代码

    import java.util.Scanner;
    public class BinInsert {
    public static int binInsert(int n, int m, int j, int i) {
    m <<= j;
    return m | n;
    }
    }

    题目三:查找组成一个偶数最接近的两个素数

    题目描述

    任意一个偶数(大于2)都可以由2个素数组成。组成偶数的两个素数有很多种情况。本题目要求输出组成指定偶数的两个素数差值最小的素数对。

    解题思路

    要解决这个问题,可以按照以下步骤进行:

  • 从偶数n的一半开始,逐步递减检查每个数i是否为素数。
  • 同时检查n-i是否为素数。
  • 一旦找到满足条件的i,输出i和n-i。
  • 解决代码

    import java.util.Scanner;
    public class Main {
    public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
    while (scan.hasNext()) {
    int n = scan.nextInt();
    int half = n / 2;
    for (int i = half; i > 0; i--) {
    if (isPrime(i) && isPrime(n - i)) {
    System.out.println(i);
    System.out.println(n - i);
    break;
    }
    }
    }
    }
    public static boolean isPrime(int m) {
    for (int i = 2; i * i <= m; i++) {
    if (m % i == 0) {
    return false;
    }
    }
    return true;
    }
    }
    上一篇:参数解析,跳石板,计算日期到天数转换,幸运的袋子
    下一篇:另类加法,走方格的方案数,最近公共祖先

    发表评论

    最新留言

    表示我来过!
    [***.240.166.169]2025年05月03日 22时34分18秒