#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
int d;
scanf("%d%d",&d,&n);
vector<int> a,b;
//相当于第二次的
a.push_back(d);
for(int i=1;i<n;i++){
b=a;
a.clear();
int pre=b[0],cnt=0;
for(int i=0;i<b.size();i++){
if(b[i]==pre){//最后一个要特判
cnt++;
}
else{
a.push_back(b[i-1]);
a.push_back(cnt);
cnt=1;
pre=b[i];
}
/*a.push_back(b[b.size()-1]);
a.push_back(cnt);*/
//这一段应该是他处理完前面的即for循环完再进行 而不是每次都进行
}
a.push_back(b[b.size()-1]);
a.push_back(cnt);
//debug
/* for(int i=0;i<a.size();i++){
printf("%d",a[i]);
}
printf("\n");*/
}
//printf("%d",d);
//printf("%d",a.size());
for(int i=0;i<a.size();i++){
printf("%d",a[i]);
}
return 0;
}
总结
1.题意理解错误,一开始给的那个例子是除了一的例子 excpet 1,如果第一个是1就要一块统计个数不能再单拿出来,坑啊
2.思路 开两个vector ,设一个pre cnt用来记相等的个数,由想等到不相等时,记录上一个相等的数字及个数,前面的都处理完,再在for循环外面处理最后一个
注意是for外,因为要先把前面的都处理完,然后输出就好啦
用字符串做找改变点,找到以后就入那个值以及个数即可
// vi ng ub nq bi le
for(int cnt=1;cnt<n;cnt++){
string t;
for(int i=0;i<s.length();i=j){
for(j=i;j<s.length()&&s[j]==s[i];j++);
t+=s[i]+to_string(j-i);
}
s=t;
}
英语
问题