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']
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值