python3面試題 按規律寫出下一個數1,11,21,1211,111221


觀察下面數字的規律

1

11

21

1211

111221

第一項是數字1

描述前一項,這數是1,即“1個1”,記作“11”

描述前一項,這數是11,即“2個1”,記作“21”

描述前一項,這數是21,即“1個2,1個1”,記作“1211”

描述前一項,這數是1211,即“1個1,1個2,2個1”,記作“111221”

用Python實現前N(N=10)個

方式1:從高位起,先統計某一個數字的次數

    再循環5次,即實現前10;

a=[1,11,21,1211,111221]
for i in range(5):
n = str(a[-1]) #取列表中的最后一個數字,並轉換為字符串;
cn=len(n) #長度
# print(n)
nstr=''
count=1
for j in range(cn-1):
# print(n[j])
if n[j]==n[j+1]: #比較相鄰的兩數,相等
count+=1
if j==cn-2:
nstr+=str(count)+str(n[j+1])
# print(count)
else: #不相等,則下入新的字符串中
nstr+=str(count)+str(n[j])
if j==cn-2:
nstr += str(1) + str(n[j+1])
count=1
a.append(int(nstr)) #列表追加為整數
# print(nstr)
print(a)

 運行結果

[1, 11, 21, 1211, 111221, 312211, 13112221, 1113213211, 31131211131221, 13211311123113112211]

 

方式2:將相同數字的分為一組;如,a='111221', ['111','22','1']

a=[1,11,21,1211,111221]
for m in range(5):
    b=str(a[-1])
    newl=[]
    zstr=""
    newstr=""
    for i in b:
        if len(zstr)==0:
            zstr=i
        else:
            if i==zstr[0]:
                zstr+=i
            else:
                newl.append(zstr)
                zstr=i
    newl.append(zstr)
    # print(zstr)
    # print(newl)
    for i in newl:
        newstr+="{}{}".format(len(i),i[0])
    a.append(newstr)
print(a)

運行結果

[1, 11, 21, 1211, 111221, '312211', '13112221', '1113213211', '31131211131221', '13211311123113112211']

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM