मान लीजिए हमारे पास एक संख्या N है, हमें इसके बाइनरी प्रतिनिधित्व में दो लगातार 1 के बीच की सबसे लंबी दूरी ढूंढनी है। यदि दो लगातार 1 नहीं हैं, तो 0 वापस करें।
उदाहरण के लिए, यदि इनपुट 71 है, तो आउटपुट 4 होगा, क्योंकि 71 बाइनरी में 1000111 है। अब चार 1 हैं, और पहला 1 और दूसरा 1 दूरी 4 पर हैं। अन्य सभी एक दूरी पर हैं। इसलिए सबसे लंबी दूरी 4 है।
हल करने के चरण
K := N के बाइनरी प्रतिनिधित्व के बिट्स की सूची बनाएं
Max := 0, C := 0, S := 0
Flag := False
i को 0 से K के आकार तक की रेंज में लिए करें
यदि K[i] '1' है और C 0 है और Flag False है, तो
C := i
Flag := True
अन्यथा जब K[i] '1' है और Flag है, तो
S := i
यदि Max < |S-C|, तो
Max := |S-C|
C := S
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] == '1' and C == 0 and Flag == False:
C = i
Flag = True
elif K[i] == '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