count-and-say序列是从以下开始的整数序列:
1,11,21,1211,111221,…
1被读作“one 1”或11。
11被读作“两个1”或21。
21被读作“一个2,然后一个1”或1211。
给定一个整数n,生成第n 个序列。
#include <iostream>
#include <string>
using namespace std;
void countAndSay(int n) {
if(n<0)
cout<<"0"<<endl;
string res = "1";
while (--n) {
string cur = "";
for (int i = 0; i < res.size(); ++i) {
int cnt = 1;
while (i + 1 < res.size() && res[i] == res[i + 1]) {
++cnt;
++i;
}
cur =cur+ to_string(cnt) + res[i]; //to_string转换为字符
}
res = cur;
}
cout<<res<<endl;
}
int main(){
int n;
cin>>n;
countAndSay(n);
}
/*
其实我们可以发现字符串中永远只会出现1,2,3这三个字符,假设第k个字符串中出现了4,那么第k-1个字符串必定有四个相同的字符连续出现,假设这个字符为1,则第k-1个字符串为x1111y。第k-1个字符串是第k-2个字符串的读法,即第k-2个字符串可以读为“x个1,1个1,1个y” 或者“个x,1个1,1个1,y个”,这两种读法分别可以合并成“x+1个1,1个y” 和 “个x,2个1,y个”,代表的字符串分别是“(x+1)11y” 和 “x21y”,即k-1个字符串为“(x+1)11y” 或 “x21y”,不可能为“x1111y”.
*/