A1140
个人思路
本题考查字符串处理,需要好好读题理解题意
题意
根据前一个字符串中,遍历到某一位key,统计与其连续相同的数字个数cnt,key和cnt作为当前字符串中的两个字符,知道字符串遍历结束
- 给出一个数字D,表示第一个数,如D=1,即第一个数为1
- 由于前一个数为1且只有一位,因此第二个数为11
- 由于前一个数为11,连续1的个数有2个,因此第二个数为12
- 由于前一个数为12,连续1的个数有1个,2的个数有1个,因此第三个数为1121
- 由于前一个数为1121,连续1的个数有2个,2的个数有1个,1的个数有1个(这个1并不连续,不能统计到前面的1中),因此第四个数为122111
- 由于前一个数为122111,连续1的个数有1个,连续2的个数有2个,连续1的个数有3个,因此第五个数为112213
以此类推
注意
- 输入的D就是第一个字符串,因此要特判N为1的情况(但测试点中没有N==1的情况)
- 注意temp的初始化
- 连续和不连续两个条件下控制i,j
个人思路代码
#include <bits/stdc++.h>
using namespace std;
int main(int argc, char *argv[]) {
string str, temp;
int N;
cin >> str >> N;
if(N == 1)
{
cout << str << endl;
return 0;
}
else
N = N - 1;
while(N--)
{
temp = "";
int len = str.length();
int i, j;
for(i = 0; i < len; ++i)
{
char c = str[i];
int count = 0;
for(j = i; j < len; ++j)
{
if(str[j] == c)//连续
{
i = j;
count++;
}
else//出现不连续
{
i = j - 1;
break;
}
}
temp += c;
temp += count + '0';
}
str = temp;
}
cout << str << endl;
return 0;
}