题目描述:
有一个数列A[n],从A[0]开始每一项都是一个数字,数列中A[n+1]都是A[n]的描述,其中A[0]=1,规则如下: A[0]:1 A[1]:11 含义其中A[0]=1是1个1 即11,表示A[0]从左到右连续出现了1次1
A[2]:21 含义其中A[1]=11是2个1 即21, 表示A[1]从左到右连续出现了2次1
A[3]:1211 含义其中A[2]从左到右是由一个2和一个1组成 即1211,表示A[2]从左到右连续出现了一次2又连续出现了一次1
A[4]:111221 含义A[3]=1211 从左到右是由一个1和一个2两个1 即111221,表示A[3]从左到右连续出现了一次1又连续出现了一次2又连续出现了2次1
输出第n项的结果 0<= n <=59
输入描述:
数列第n项 0<= n <=59
输出描述:
数列内容
示例1:
输入
4
输出
111221
时间限制:C/C++ 1秒,其他语言 2秒
空间限制:C/C++262144K,其他语言524288K
- 首先,初始化数列为第一项 "1"。
- 循环执行 n 次,从第二项开始生成数列的描述。
- 在每一次循环中,遍历当前数列描述 sequence 的每个字符:
- 初始化变量 count 为 1,表示当前数字的连续次数。
- 从第二个字符开始,如果当前字符与前一个字符相同,则将连续次数 count 加一。
- 如果当前字符与前一个字符不同,则将前一个字符的连续次数 count 和数字本身添加到新的数列描述 new_sequence 中。
- 遍历完所有字符后,将最后一个字符的连续次数 count 和数字本身添加到新的数列描述 new_sequence 中。
- 更新数列描述 sequence 为新的数列描述 new_sequence。
- 循环结束后,返回数列描述 sequence。
# -*- coding: utf-8 -*-
'''
@File : 2023-B-数列描述.py
@Time : 2024/01/07 15:34:02
@Author : mgc
@Version : 1.0
@Desc : None
'''
def describe_sequence(n):
sequence = "1" # 初始化数列为第一项 "1"
for _ in range(n):
count = 1 # 当前数字的连续次数
new_sequence = "" # 存储新的数列描述
for i in range(1, len(sequence)):
# 如果当前数字与前一个数字相同,则连续次数加一
if sequence[i] == sequence[i - 1]:
count += 1
else:
# 否则,将前一个数字的连续次数和数字本身添加到新的数列描述中
new_sequence += str(count) + sequence[i - 1]
count = 1 # 重置连续次数
# 添加最后一个数字的连续次数和数字本身到新的数列描述中
new_sequence += str(count) + sequence[-1]
sequence = new_sequence # 更新数列描述为新的数列描述
return sequence
# 输入获取
n = int(input())
# 计算第 n 项的数列描述
result = describe_sequence(n)
# 输出结果
print(result)