题目描述
小 S 今天给你出了一道找规律题,题目如下:
有如下的数列 1,11,21,1211,111221,312211,……
小 S 问你这个数列的第 N 项是多少,而你一头雾水根本找不出规律。
聪明的小 R 悄悄地告诉你是这样的:
1,
上一个数是一个 1,写作 11,
上一个数是两个 1,写作 21,
上一个数是一个 2,一个 1,写作 1211,
上一个数是一个 1,一个 2,两个 1,写作 111221,
…………
相信聪明的你一定可以解决这个问题。
输入
第一行包括一个正整数 N。
输出
一行一个正整数(注意数字可能会超过长整形,请注意用数组或者字符串存储)。
样例输入
6
样例输出
312211
数据规模与约定
时间限制:1 s
内存限制:256 M
100% 的数据保证 1≤N≤30
#include <iostream>
using namespace std;
int ans[31][10005] = {{}, {1}}, n;
int main() {
cin >> n;
for (int i = 2; i <= n; i++) {
int ind = 0;
for (int j = 0; ans[i - 1][j] != 0; j++) {
int x = 1;
while (ans[i - 1][j] == ans[i - 1][j + 1]) {
x++;
j++;
}
ans[i][ind++] = x;
ans[i][ind++] = ans[i - 1][j];
}
}
for (int i = 0; ans[n][i] != 0; i++) {
cout << ans[n][i];
}
cout << endl;
return 0;
}