原题链接:Look-and-say Sequence(20分)
题意: 求给定规则的数列的第n项。
关键词: 字符串、模拟
输入格式:
共一行包含两个整数 D
和 N
。
输出格式:
在一行中给出数字 D
的外观数列的第 N
项。
数据范围:
0 ≤ D ≤ 9,
1 ≤ N ≤ 40
输入样例:
1 8
输出样例:
1123123111
思路: 首先在草稿纸上模拟明白外观数列是什么意思:每一项都是对前一项的描述。首先把数据读入成字符串,从求第2项开始,总共进行n-1次操作。用双指针判断字符出现的次数,每完成一次操作就记录在ans中。
代码:
#include <iostream>
using namespace std;
int main(){
string ans; //外观数列
int n;
cin >> ans >> n;
for(int i = 1; i < n; i ++ ){
string t;
for(int i = 0; i < ans.size(); ){
int j = i;
while(j < ans.size() && ans[i] == ans[j]) j++;
t += ans[i] + to_string(j - i); // 字符和个数
i = j;
}
ans = t; // 记录一次
}
cout << ans << endl;
return 0;
}