天天看点

计数和数数

伯爵说”序列如下:1,11,21,1211,111221, \ldots1,11,21,1211,111221,…。其

1

读作

one 1

或者

11

11

读作

two 1s

或者

21

21

读作

one 2, one 1

或者

1211

输入格式

多组输入,读到文件结束。每组输入给定一个整数 n(1 \leq n \leq 30)n(1≤n≤30)。

输出格式

输出第 nn 个序列。注意,整数序列以字符串的形式表示。

样例输入

6
           

样例输出

312211
           

《译》

说数序列从 1 开始,然后开始读:

1: 1

2:11(因为上面一个一,则此处为11)

3:21(因为上面二个一,则此处为21)

4:1211(因为上面一个二、两个一,则此处为1211)

5:111221(因为上面一个一、一个二、两个一,则此处为111221)

6:312211(因为上面三个一、两个二、一个一,则此处为312211)

#include<iostream>

#include <cstring>

using namespace std;

string result[100];

string change(string s) {

string tmp = " ";

int len = s.length(), i, j, m;

for (i = 0; i < len; i = i + m) { m = 1;

for (j = i + 1; j < len; j++) {

if (s[i] == s[j])

m++;

else

break;

}

char c = m + '0';

tmp.push_back(c);

tmp.push_back(s[i]);

}

return tmp;

}

string dp(int n) {  

string result = "1";

for (int i = 1; i < n; ++i) {

result = change(result);

}

return result;

}

int main() {

int n;

while (cin >> n)

cout << dp(n) << endl;

}