Print N-bit binary numbers having more 1’s than 0’s in all prefixes in Python
N-bit binary numbers having more or equal 1’s than 0’s in Python
Here, on this page, we will discuss the program to print N-bit binary numbers having more or equal 1’s than 0’s in Python programming language. We are given an integer value n and need to print n-bit binary numbers.
Example :
- Input : 4
- Output : 1111 1110 1101 1100 1011 1010
- Explanation : 1111 1110 1101 1100 1011 1010 all these are the required binary numbers
Method Discussed :
- Method 1 : Using Recursive Way
- Method 2 : Using Non-Recursive Way
Method 1:
In this method we use recursion. At each point in the recursion, we append 0 and 1 to the partially formed number and recur with one less digit.
Python Code
Run
def printRec(number, extraOnes, remainingPlaces):
if 0 == remainingPlaces:
print(number, end=" ")
return
printRec(number + "1", extraOnes + 1, remainingPlaces - 1)
if 0 < extraOnes:
printRec(number + "0", extraOnes - 1, remainingPlaces - 1)
def printNums(n):
str = ""
printRec(str, 0, n)
n = 4
printNums(n)
Output
1111 1110 1101 1100 1011 1010
Method 2:
In this non-recursive method, the idea is to directly generate the numbers in the range of 2^N to 2^(N-1), then require only these which satisfy the condition
Run
def getBinaryRep(N, num_of_bits):
r = ""
num_of_bits -= 1
while num_of_bits >= 0:
if N & (1 << num_of_bits):
r += "1"
else:
r += "0"
num_of_bits -= 1
return r
def NBitBinary(N):
r = []
first = 1 << (N - 1)
last = first * 2
for i in range(last - 1, first - 1, -1):
zero_cnt = 0
one_cnt = 0
t = i
num_of_bits = 0
while t:
if t & 1:
one_cnt += 1
else:
zero_cnt += 1
num_of_bits += 1
t = t >> 1
if one_cnt >= zero_cnt:
all_prefix_match = True
msk = (1 << num_of_bits) - 2
prefix_shift = 1
while msk:
prefix = ((msk & i) >> prefix_shift)
prefix_one_cnt = 0
prefix_zero_cnt = 0
while prefix:
if prefix & 1:
prefix_one_cnt += 1
else:
prefix_zero_cnt += 1
prefix = prefix >> 1
if prefix_zero_cnt > prefix_one_cnt:
all_prefix_match = False
break
prefix_shift += 1
msk = msk & (msk << 1)
if all_prefix_match:
r.append(getBinaryRep(i, num_of_bits))
return r
n = 4
results = NBitBinary(n)
for i in range(len(results)):
print(results[i], end=" ")
Output
1111 1110 1101 1100 1011 1010
Prime Course Trailer
Related Banners
Get PrepInsta Prime & get Access to all 200+ courses offered by PrepInsta in One Subscription

Login/Signup to comment