PythonChallenge第10题

来源:互联网 发布:知彼而知己 打不开 编辑:程序博客网 时间:2024/05/01 13:32

点击题目链接
还是图片乱点+网页源码找到的题目。
根据:a = [1, 11, 21, 1211, 111221,
求len(a[30]) = ?
先找出a中个元素是什么规律的
目测,手算都找不出来什么规律。但是,数位增加真的很快的,还有就是只有12构成的数,然后就不知道怎么搞了。
网上看到如下的规律:
规律是:
1
11— 表示前一个数“1”是 1 个 1;
21— 表示前一个数“11”是 由 2 个 1 组成;
1211— 表示前一个数“21”是 由 1 个 2、1 个 1 组成;
111221— 即 11 12 21 ,表示前一个数“1211”是依次由 1 个 1,1 个 2, 2 个 1组成;
312211—即 31 22 11,表示前一个数“111221”是依次由 3 个 1,2 个 2, 1 个 1 组成;
所以,下一个数应填 13112221—即 13 11 22 21, 表示前一个数“312211”是依次由 1 个 3,1 个 1,2 个 2,2 个 1 组成;
同理,再下一个数根据“13112221”填 1113213211,表示前一个数“13112221”是依次由 1 个 1,1 个 3,2 个 1,3 个 2,1 个 1 组成。

想了好久不知道怎么搞的
维基百科链接:http://zh.wikipedia.org/zh-cn/%E5%A4%96%E8%A7%80%E6%95%B8%E5%88%97
在上面发现一个链接:http://oeis.org/A005150,下面有个别人写的Python程序。

def A005150(n):    p="1"    seq=[1]    while(n>1):        q=''        idx=0        l=len(p)        while(idx<l):            start=idx            idx=idx+1            while idx<l and p[idx]==p[start]:                idx=idx+1            q=q+str(idx-start)+p[start]        n,p=n-1,q        seq.append(int(p))    return seq

上面的就是,返回的结果是1-n的位置的所有数据,修改下程序,可以只返回第n个位置的数,或者第n个位置数字的长度。

def A005150(n):    p="1"    #seq=[1]    while(n>1):        q=''        idx=0        l=len(p)        while(idx<l):            start=idx            idx=idx+1            while idx<l and p[idx]==p[start]:                idx=idx+1            q=q+str(idx-start)+p[start]        n,p=n-1,q        #seq.append(int(p))    return p

改的很简单

>>> len(A005150(30))4462>>> len(A005150(29))3410>>> len(A005150(31))5808

还有个问题就是n=31的时候出的是30的长度,才能找到下一个的链接。知道了list 是从0下标开始的,a = [1, 11, 21, 1211, 111221, 求得是a[30]的长度,需要输入31才对。
下题链接:5808.html

0 0
原创粉丝点击