“伯爵說”序列如下:1,11,21,1211,111221, …。其1讀作one 1或者11。11讀作two 1s或者21。21讀作one 2, one 1或者1211。
輸入格式
多組輸入,讀到文件結(jié)束。每組輸入給定一個整數(shù) n(1≤n≤30)。
輸出格式
輸出第 n 個序列。注意,整數(shù)序列以字符串的形式表示。
樣例輸入
6
樣例輸出
312211
花了很長時間做出來,思路一直不對,在網(wǎng)上也沒找的很好的解法。思路在下面
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
做出來后又花了一會時間試著用函數(shù)了寫出來。
def Ji_Shu(up_list): # 計數(shù)函數(shù),元素存入val__A,次數(shù)存入count_A。
new_val = 0
val__A = []
count_A = []
for i in up_list:
try: # 嘗試判斷新取出的元素是不是和之前的一樣,出錯就會跳到第二個except。
if val__A[new_val] == i: #count_A計相同元素個數(shù)
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): # 數(shù)數(shù)函數(shù),結(jié)果存入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()