天天看點

計數和數數

伯爵說”序列如下: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;

}