✅创作者:陈书予
🎉个人主页:陈书予的个人主页
🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区
🌟专栏地址: Java华为OD机试真题(2022&2023)
文章目录
- 1. 题目描述
- 2. 输入描述
- 3. 输出描述
- 4. Java算法源码
- 5. 测试
- 6.解题思路
1. 题目描述
小陈
在学习二进制时,发现了一类不含101的数,也就是:
将数字用二进制表示,不能出现101。
现在给定一个正整数区间,请问这个区间内包含了多少个不含101的数?
2. 输入描述
输入的唯一一行包含两个正整数
。
3. 输出描述
输出的唯一一行包含一个整数,表示在区间内一共有几个不含101
的数。
4. Java算法源码
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int left = sc.nextInt();
int right = sc.nextInt();
int result = right - left + 1;
for (int i = left; i <= right; i++) {
String number_str = Integer.toBinaryString(i);
if (number_str.contains("101")) {
result -= 1;
}
}
System.out.println(result);
}
5. 测试
6.解题思路
- 读取输入的左边界
left
和右边界right
。 - 初始化结果变量
result
为right - left + 1
,表示初始区间内的所有数都满足条件。 - 使用循环遍历区间内的每个数,从
left
到right
。 - 将当前数转换为二进制字符串
number_str
,使用Integer.toBinaryString()
方法进行转换。 - 检查二进制字符串中是否包含子字符串
"101"
,使用contains()
方法进行检查。 - 如果包含
"101"
,则说明该数不满足条件,将result
减 1。 - 继续遍历下一个数,直到遍历完区间内的所有数。
- 循环结束后,输出结果
result
。