A25797. 外观数列提示信息:外观数列是一个整数序列,给定该数列的第一项数据之后,从第二项开始,每一项都是对前一项数据的描述。例如:给定外观数列的第一项为 1;接下来第二项是对第一项数据的描述,即“一个 1”,记作 11;第三项是对第二项数据的描述,即“两个 1”,记作 21;第四项是对第三项数据的描述,即“一个 2,一个 1”,记作 1211;第五项是对第四项数据的描述,即“一个 1,一个 2,两个 1”…
填空题
中等
知识点
题目描述
外观数列
提示信息:
外观数列是一个整数序列,给定该数列的第一项数据之后,从第二项开始,每一项都是对前一项数据的描述。
例如:
给定外观数列的第一项为 1;
接下来第二项是对第一项数据的描述,即“一个 1”,记作 11;
第三项是对第二项数据的描述,即“两个 1”,记作 21;
第四项是对第三项数据的描述,即“一个 2,一个 1”,记作 1211;
第五项是对第四项数据的描述,即“一个 1,一个 2,两个 1”,记作 111221;以此类推......
题目描述
给定外观数列的第一项 x 以及一个整数 n,请计算出该外观数列第 n 项的值。
例如:x = 2,n = 3,外观数列为:
2
12
1112
3112
132112
......外观数列第 3 项为 1112。
输入描述
输入两个整数 x(1≤x≤100)和 n(1≤n≤30)
输出描述
输出一个整数,表示外观数列第 n 项的值
样例输入
2 3样例输出
1112参考答案
#include <bits/stdc++.h>
using namespace std;
char x[10000], y[10000];
int main() {
int n, lx, t, k;
cin >> x >> n;
lx = strlen(x);
for (int i = 1; i < n; i++) {
t = 1, k = 0;
for (int i = 1; i <= lx; i++) {
if (x[i] != x[i - 1]) {
y[k] = t + '0';
y[k + 1] = x[i - 1];
k += 2;
t = 1;
} else {
t++;
}
}
lx = k;
memcpy(x, y, sizeof(y));
memset(y, 0, sizeof(y));
}
cout << x;
return 0;
}
上一题
下一题