目录
一、二进制插入
(1)原题再现
二进制插入__牛客网
给定两个32位整数n和m,同时给定i和j,将m的二进制数位插入到n的二进制的第j到第i位,保证n的第j到第i位均为零,且m的二进制位数小于等于i-j+1,其中二进制的位数从0开始由低到高。测试样例:
1024,19,2,6
返回:1100
(2)问题分析
本题很简单,跟i都没有任何关系,只要读懂题目就可以了。因为他保证n的第i位到第j位都是0,并且m的二进制位数不会超过(i-j),将n的第i位到第j位替换成m的二进制位,其实就是n加上m扩大(2^j)倍后的结果。
1024 :1000 0000 0000
19 :0000 0001 0011
第2位到第6位,就是将高亮红色替换成高亮绿色。
故而将m<<j+n
(3)完整代码
import java.util.*; public class BinInsert { public int binInsert(int n, int m, int j, int i) { // write code here return (n+(m<<j)); } }
二、查找组成一个偶数最接近的两个素数
(1)原题再现
任意一个偶数(大于2)都可以由2个素数组成,组成偶数的2个素数有很多种情况,本题目要求输出组成指定偶数的两个素数差值最小的素数对。
输入描述:
输入一个大于2的偶数
输出描述:
从小到大输出两个素数
示例1
输入
20
输出
7
13
示例2
输入
4
输出
2
2
(2)问题分析
本题也是一道简单题,首先定一个判断是否为素数的方法(isPrime()),用for循环,从2到给定的数字本身n遍历,如果在这范围内还有数能被n除尽,就范围false,如果一直循环完毕都没有就返回true。
因为题目要求返回差值最小的素数对,这两个数和为n,将n/2,从n一半的位置开始遍历。判断i和n-i是否同时为素数,如果是则打印,结束循环。
(3)完整代码
import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int num = sc.nextInt(); for (int i = num / 2; i >= 2; i--) { if (isPrime(i) & isPrime(num - i)) { System.out.println(i); System.out.println(num - i); break; } } } public static boolean isPrime(int n) { for (int i = 2; i < n; i++) { if (n % i == 0) { return false; } } return true; } }