“伯爵說”序列如下:1, 11, 21, 1211, 111221, ...1 讀作 "one 1" 或者 11。11 讀作 "two 1s" 或者21。21 讀作 "one 2, one 1" 或者 1211。
格式:多組輸入,讀到文件結束。每組輸入給定一個整數n,輸出第n個序列。(1<=n<=30)
注意:整數序列以字符串的形式表示。
PS:相信你已經看懂了題目,如果沒看懂,小提示下,
其實類似於求”菲波拉契“數列的第n項哦~
樣例1
輸入:
6
輸出:
312211
注:題目真是晦澀難懂,大致如下:
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;
}