मान लीजिए हमारे पास एक धनात्मक संख्या n है, हमें जांचना है कि दी गई संख्या n के बिट पैटर्न में लगातार 1s की संख्या बाएं से दाएं बढ़ते क्रम में है या नहीं।
उदाहरण के लिए, यदि n = 1775 है, तो आउटपुट True होगा क्योंकि 1775 का बाइनरी प्रतिनिधित्व 11011101111 है, इसलिए लगातार 1s की संख्या [2, 3, 4] है जो बढ़ रही है।
हल करने का तरीका
- bits_pattern := n के बिट्स की सूची
- bit_count := bits_pattern का आकार
- p_cnt := 0, c_cnt := 0, i := 0
- जब तक i < bit_count:
- यदि bits_pattern[i] == '1', तो c_cnt++, i++
- अन्यथा यदि bits_pattern[i-1] == '0', तो i++, c_cnt = 0, जारी रखें
- अन्यथा:
- यदि c_cnt < p_cnt, तो 0 लौटाएं
- i++, p_cnt = c_cnt, c_cnt = 0
- यदि p_cnt > c_cnt और c_cnt ≠ 0, तो False लौटाएं
- True लौटाएं
उदाहरण
def solve(n):
bits_pattern = list(bin(n))
bit_count = len(bits_pattern)
p_cnt = 0
c_cnt = 0
i = 0
while i < bit_count:
if bits_pattern[i] == '1':
c_cnt += 1
i += 1
elif bits_pattern[i - 1] == '0':
i += 1
c_cnt = 0
continue
else:
if c_cnt < p_cnt:
return 0
i += 1
p_cnt = c_cnt
c_cnt = 0
if p_cnt > c_cnt and c_cnt != 0:
return False
return True
n = 1775
print(solve(n))
इनपुट
1775
आउटपुट
True