笔试日期2019年8月14日,语言Java
第一题(100分)
题目描述
在一个int型整数(对应的比特流)中查找某个比特块(本题固定为5,即二进制’101’)出现的次数及首次出现的位置,说明:
1、输出次数和首次出现的位置中间用空格隔开
2、位置从0开始,即最右边位置为0,向左依次增加
3、如果该int型整数中没有找到该比特块,次数返回0,位置返回-1
4、比特位允许重复使用,如’10101’中的中间的比特1即可以与前面的’01’组成‘101’,也可以与后面的’10’组成‘101’
输入描述
一个任意的十进制int型整数
输出描述
在输入整数对应的二进制比特流中,比特块(101)出现的次数和首次出现的位置,次数和位置分别以十进制int型整数表示,中间用空格隔开。
示例
输入
21
输出
2 0
分析
举个例子,21的二进制为10101,从右往左数,'101’第一次出现的位置是0,出现次数是2.
那么按一般思路来说,问题分三步:
-
转二进制
-
首次出现位置
-
出现次数
第一步就很简单,直接用Integer.toBinaryString就好了,或者用高中学的老办法
第二、三步我们可以结合’101’这个特点分析,只要满足三位是’101’,也就是满足连续三位为’1’,‘0’,‘1’,那用三指针就能解决问题。直接搞三个变量,分别判断就是。
这题有个陷阱,位置是从右往左计算的,但示例’10101’从左往右数也是相同的结果,记得用‘1010’,也就是10,测试一遍。
解答
import java.util.Scanner;
public