PAT 1140 Look-and-say Sequence python解法

1140 Look-and-say Sequence (20 分)
Look-and-say sequence is a sequence of integers as the following:

D, D1, D111, D113, D11231, D112213111, …
where D is in [0, 9] except 1. The (n+1)st number is a kind of description of the nth number. For example, the 2nd number means that there is one D in the 1st number, and hence it is D1; the 2nd number consists of one D (corresponding to D1) and one 1 (corresponding to 11), therefore the 3rd number is D111; or since the 4th number is D113, it consists of one D, two 1’s, and one 3, so the next number must be D11231. This definition works for D = 1 as well. Now you are supposed to calculate the Nth number in a look-and-say sequence of a given digit D.

Input Specification:
Each input file contains one test case, which gives D (in [0, 9]) and a positive integer N (≤ 40), separated by a space.

Output Specification:
Print in a line the Nth number in a look-and-say sequence of D.

Sample Input:
1 8
Sample Output:
1123123111

解题思路:题目要求的其实就是看字符串中元素的排列。比如,对于这个字符串:115248,它就是2个1,1个5,1个2,1个4,1个8组成的字符串,它的look-and-say sequence是12 51 21 41 81(加空格方便观察)。
再比如题目中给出的1的前9个look-and-say sequence分别是(加空格方便观察):
1 (初始值)
11 (1个1)
12 (2个1)
11 21 (1个1、1个2)
12 21 11 (2个1、1个2、1个1)
11 22 13 (1个1、2个2、3个1)
12 22 11 31 (2个1、2个2、1个1、1个3)
11 23 12 31 11 (1个1、3个2、2个1、1个3、1个1)
12 21 31 11 21 31 13 (2个1、1个2、1个3、1个1、1个2、1个3、3个1)
从手工求解的思路出发,很容易就可以写出来。

d, n = map(int,input().split())
#d, n = 1, 8
seq = str(d) + '1'
#seq = 'd1'
def look_and_say(seq):
    count = 1
    s = ''
    for i in range(1,len(seq)):
        if seq[i] == seq[i-1]:
            #对比前后两个数,相同则计数器加1
            count += 1
        else:
            #不同则输出数数结果,并将计数器置1
            s += seq[i-1] + str(count) 
            count =1
    #循环结束后将最后一轮数数结果加上
    s += seq[-1] + str(count)
    return s
#print(look_and_say(seq))
#分情况输出
if n == 1:
    print(d)
elif n == 2:
    print(seq)
elif n>2:   
    for i in range(n-2):
        seq = look_and_say(seq)
    print(seq)

你可能感兴趣的:(python,用Python刷PAT,(Advanced,Level),Practice)