a[0]=1,a[1]=11,a[2]=21,a[3]=1211找出规律,输入下标,得出对应的值

def count(n):
    a=[1,11] #初始化
    if n==0:
        return a[0]
    if n==1:
        return a[1]
    for i in range(2,n+1): #每遍历一次得出下一个值,当n=3时,第一次由a[1]先得出a[2],下次由a[2]得出a[3]
        s=str(a[i-1]) #得到列表上一个值,并变成字符串
        #print(s)
        l=len(s) #字符串的长度,用来控制判断遍历的次数,2位则判断1次
        cnt=1 #记录相同字符的个数
        tmp='' #记录结果
        for j in range(l-1): #思路是每次添加判断的前一个字符,最后一位时添加判断2个字符
            if s[j]==s[j+1]: #比如a[0]和a[1]相同则cnt+1
                cnt+=1
            else:
                tmp+=str(cnt) #字符不同时把当前或上次判断好的结果添加到tmp
                tmp+=s[j]
                cnt=1
                if (j+2)==l: #字符不同且是最后一次遍历时添加末位字符到tmp
                    tmp+=str(cnt)
                    tmp+=s[j+1]
        if s[j]==s[j+1]: #遍历结束代表已到末位,字符相同添加到tmp
            tmp+=str(cnt)
            tmp+=s[j]
        a.append(int(tmp)) #把循环一次得到的值添加到数组,每次循环可以得到一个
    return a[n]
            

while True:
    try:
        n=int(input())
        print(count(n))
    except:
        break

 

posted @ 2020-12-03 13:19  十方劫  阅读(621)  评论(0编辑  收藏  举报