计蒜客 第二十二题 计数和数数

“伯爵说”序列如下:1,11,21,1211,111221, …。其1读作one 1或者11。11读作two 1s或者21。21读作one 2, one 1或者1211。

输入格式

多组输入,读到文件结束。每组输入给定一个整数 n(1≤n≤30)。

输出格式

输出第 n 个序列。注意,整数序列以字符串的形式表示。

样例输入

6
样例输出

312211

花了很长时间做出来,思路一直不对,在网上也没找的很好的解法。思路在下面

try: 
    while True:
        x = int(input())
        A = [1]
        b = 0
        B = []
        C = []
        if x > 1:
            for j in range(x-1):
                for i in A:
                    try:
                        if B[b] == i:
                            C[b] = C[b] + 1
                        else:
                            b = b + 1
                            B.append(i)
                            C.append(1)
                    except SyntaxError:
                        pass
                    except IndexError:
                        B.append(i)
                        C.append(1)
                A = []
                b = 0
                for g, h in zip(C, B):
                    A.append(str(g))
                    A.append(str(h))
                B = []
                C = []
            print("".join(A))
            A = [1]
            b = 0
            B = []
            C = []
        else:
            print('1')
            A = [1]
            b = 0
            B = []
            C = []        
except EOFError:
    pass

做出来后又花了一会时间试着用函数了写出来。

def Ji_Shu(up_list):  # 计数函数,元素存入val__A,次数存入count_A。
    new_val = 0
    val__A = []
    count_A = []
    for i in up_list:
        try:     # 尝试判断新取出的元素是不是和之前的一样,出错就会跳到第二个except。
            if val__A[new_val] == i:  #count_A计相同元素个数
                count_A[new_val] = count_A[new_val] + 1
            else:    #把新元素添加到val__A,并count_A也添加 1
                new_val = new_val + 1
                val__A.append(i)
                count_A.append(1)
        except SyntaxError:  # 暂时没找到能去掉报错这一步的办法
            pass
        except IndexError:     #把新元素添加到val__A,并count_A也添加 1
            val__A.append(i)
            count_A.append(1)
    return val__A, count_A

def Shu_Shu(val__A, count_A):  # 数数函数,结果存入up_list
    up_list = []
    for a, b in zip(count_A, val__A):
        up_list.append(str(a))
        up_list.append(str(b))
    return up_list


def main(): 
    try:  # 判断是否空字符
        while True:
            x = int(input())
            up_list = [1]
            if x == 1:
                print('1')
            else:
                for j in range(x-1):
                    val__A, count_A = Ji_Shu(up_list)
                    up_list = Shu_Shu(val__A, count_A)
                print("".join(up_list))
    except EOFError:
        pass

if __name__ == '__main__':
    main()
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 从几天前我就开始纠结今天推什么,机缘巧合之下看到了国庆档的《湄公河行动》,今天就来简单的聊聊这部片子吧。 接下来会...
    路边书店阅读 2,732评论 0 0
  • 上午我骑车回家,准备辅导侄儿和侄女学习,没想到他们去地里捋菊花去了。我把他们喊回来后就让他们去北屋写作业了,我和妈...
    静心专注阅读 1,410评论 0 0
  • 在南街,人们都叫我奶奶四娘,称呼我爷爷为四大爷。爷爷的脾气很轴,奶奶则很豁达,谁家有大事小情都肯帮忙,整...
    简一叶阅读 3,793评论 5 12
  • 世界上的每一件事都不是能掌控的,至少大部分不能。就像以前美国拍了世界上第一张地球的图片,现在中国也行了,这样的...
    忧哩昂阅读 1,664评论 0 0