使用Python查找数字二进制形式中连续1之间最长距离的程序
假设有一个数字N,我们必须找到其二进制表示中两个连续1之间的最长距离。如果没有两个连续的1,则返回0。
因此,如果输入为71,则输出将是4,因为71的二进制表示为1000111。现在有四个1,第一个1和第二个1的距离为4。其余的都距离一个单位。所以这里的最长距离是4。
为了解决这个问题,我们将按照以下步骤进行——
- K:将N的二进制表示的位拆分合成一个列表
-
Max:0,C:0,S:0
-
Flag:False
-
对于范围从0到K大小的i,执行以下操作
- 如果K[i]为’1’,且C为0且Flag为False,则
- C:= i
-
Flag:= True
-
否则,当K[i]为’1’且Flag时,
- S:= i
-
如果Max<abs(S-C),则
-
Max:= | S-C |
-
C:= S
- 如果K[i]为’1’,且C为0且Flag为False,则
-
返回Max
让我们看以下实现,以获得更好的理解——
示例
def solve(N):
B = bin(N).replace('0b','')
K = str(B)
K = list(K)
Max = 0
C = 0
S = 0
Flag = False
for i in range(len(K)):
if K[i] is '1' and C is 0 and Flag is False:
C = i
Flag = True
elif K[i] is '1' and Flag:
S = i
if Max<abs(S-C):
Max = abs(S-C)
C = S
return Max
n = 71
print(solve(n))
输入
71
输出
4