একটি N সংখ্যা দেওয়া আছে। এর বাইনারি রিপ্রেজেন্টেশনে দুটি ক্রমিক ১-এর মধ্যে সর্বোচ্চ দূরত্ব বের করতে হবে। যদি দুটি ক্রমিক ১ না থাকে, তবে ০ ফেরত দিন।
যেমন, 71 হলে আউটপুট ৪। কারণ 71 বাইনারি = 1000111। প্রথম ১ এবং দ্বিতীয় ১-এর দূরত্ব ৪। বাকিগুলোর দূরত্ব ১।
সমাধানের ধাপসমূহ
- K := N-এর বাইনারি বিটের লিস্ট
- Max := 0, C := 0, S := 0, Flag := False
- K-এর প্রতিটি বিট i এর জন্য:
- যদি K[i] == '1' এবং C == 0 এবং Flag == False: C := i, Flag := True
- অন্যথায় যদি K[i] == '1' এবং Flag: S := i, Max := max(Max, |S-C|), C := S
- Max ফেরত দিন।
উদাহরণ
def solve(N):
B = bin(N).replace('0b','')
K = list(B)
Max = 0
C = 0
S = 0
Flag = False
for i in range(len(K)):
if K[i] == '1' and C == 0 and Flag is 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