簡體   English   中英

生成行中沒有 2 個零或 3 個 1 的二進制序列

[英]Generate binary sequence without 2 zeros OR 3 1's in the row

我的作業任務是生成二進制序列(樣本輸入在 1<=n<=30 范圍內),沒有兩個零或三個一起。 我制作了簡單的二進制生成器,其工作原理如下所示。 我需要修改它以獲得此輸出(並且還根據輸出):

n = int(input())
def gen(n):
    if n == 0:
        return ['']
    l = gen(n-1)
    start0 = []
    start1 = []
    for seq in l:
        start0.append('0' + seq)
        start1.append('1' + seq)
    return start0 + start1
l1 = gen(n)
for elem in l1:
    print(elem)
Sample Input

4
Sample Output(which I have right now)

0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
Sample Output I need to obtain:
0101
0110
1010
1011
1101

簡而言之,應該排除 1000、1110、1100、0011、0111 等序列(連續沒有兩個零或三個 1)。 為此嘗試了列表方法,但我未能在所有范圍內正常工作(1<=n<=30)。 有任何想法嗎?

PS 我必須在不使用 itertools 的情況下完成它。 避免 itertools 是任務的一部分。

只需在循環中添加兩個下一個 if-s。

這些 if-s 的字面意思是接下來的事情:

  1. 如果您當前的數字已經以 0 開頭,請不要在前面加上下一個 0,否則您會在開頭得到兩個或更多相鄰的 0,這與任務背道而馳。
  2. 如果您當前的號碼已經以 11 開頭,請不要在前面加上下一個 1,否則您會在開頭得到三個或更多相鄰的 1,這也是違反任務的。

在線試用!

n = int(input())
def gen(n):
    if n == 0:
        return ['']
    l = gen(n-1)
    start0 = []
    start1 = []
    for seq in l:
        if not seq.startswith('0'):
            start0.append('0' + seq)
        if not seq.startswith('11'):
            start1.append('1' + seq)
    return start0 + start1
l1 = gen(n)
for elem in l1:
    print(elem)

輸入 4 為 output:

0101
0110
1010
1011
1101

輸入 5 為 output:

01010
01011
01101
10101
10110
11010
11011

@Arty 有所問的答案。 這是另一個解決方案的生成器示例:

def gen(n):
    if n == 1:
        yield from '01'
    else:
        for seq in gen(n-1):
            if not seq.endswith('0'):
                yield seq + '0'
            if not seq.endswith('11'):
                yield seq + '1'

n = int(input('Bits? '))
for elem in gen(n):
    print(elem)

Output:

Bits? 8
01010101
01010110
01011010
01011011
01101010
01101011
01101101
10101010
10101011
10101101
10110101
10110110
11010101
11010110
11011010
11011011

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM