笔试-二进制

应用题

将符合区间[l,r]内的十进制整数转换为二进制表示,请问不包含"101"的整数个数是多少?

实现

python 复制代码
l = int(input("请输入下限l,其值大于等于1:"))
r = int(input("请输入上限r,其值大于等于l:"))

binary_list = []
# 默认值为0,对应数值为1,未反转
def decimal_to_binary(number):

    if number == 0:
        # 第一次要对空列表配置,否则后面的替换会报错
        if len(binary_list) == 0:
            binary_list.append(0)
        else:
            binary_list[0] = 0  
    else:  
        
        N = 0
        # 当次二进制临界值
        while 2**N <= number:
            N = N + 1
        
        # 第一次要对空列表配置,否则后面的替换会报错
        if len(binary_list) == 0:
            # 设置列表长度为N,全元素置0
            for i in range(0, N):
                binary_list.append(0)
        
        # 临界值位置元素置1
        binary_list[N-1] = 1
        
        left_number = number - 2**(N-1)
        if left_number > 0:
            decimal_to_binary(left_number)
      
# 27 = 16 + 8 + 2 + 1
# 10 = 8 + 2
# decimal_to_binary(32)
# decimal_to_binary(0)
# decimal_to_binary(27)
# decimal_to_binary(10)

# binary_list.reverse()
# print(binary_list)

# string = ""
# for i in binary_list:
#     string = string + str(i)
# print(f"二进制为:{string}")


collections = []
# 范围内的二进制数,构建二维新列表
for i in range(l, r+1):

    decimal_to_binary(i)
    binary_list.reverse()
    # 长度小于3的列表一定没有"101"
    if len(binary_list) >= 3:
        collections.append(binary_list)
    # 再清空
    binary_list = []

print(collections)

sum = 0
for i in range(0, len(collections)):
    for j in range(0, len(collections[i])-2):
        if collections[i][j] == 1 and collections[i][j+1] == 0 and collections[i][j+2] == 1:
            sum = sum + 1

print(f"不包含"101"的整数个数为{len(collections)-sum}。")
powershell 复制代码
输入下限l,其值大于等于1:2
请输入上限r,其值大于等于l:10
[[1, 0, 1], [1, 1, 0], [1, 1, 1], [1, 0, 0, 0], [1, 0, 0, 1], [1, 0, 1, 0]]
不包含"101"的整数个数为4。
相关推荐
Mysticbinary7 天前
二进制与位操作
二进制·位操作
前端熊猫18 天前
二进制、八进制、十进制和十六进制的相互转换
c语言·开发语言·二进制·十六进制·八进制
zhuqiyua2 个月前
直接调用本地API(NTAPI)
操作系统·windbg·逆向·二进制·osed
风间琉璃""2 个月前
二进制与网络安全的关系
安全·机器学习·网络安全·逆向·二进制
zhuqiyua2 个月前
深入解析Kernel32.dll与Msvcrt.dll
汇编·microsoft·windbg·二进制·dll
zhuqiyua3 个月前
windows二进制安全零基础(二)
汇编·安全·二进制
Espresso Macchiato3 个月前
Leetcode 3352. Count K-Reducible Numbers Less Than N
动态规划·二进制·leetcode hard·leetcode 3352·leetcode周赛423
sweetheart7-73 个月前
LeetCode78. 子集(2024秋季每日一题 58)
二进制·dfs·枚举·数组·子集
centos083 个月前
PWN(栈溢出漏洞)-原创小白超详细[Jarvis-level0]
网络安全·二进制·pwn·ctf