这个题解不正经(各种风格任你copy)
2026-04-06 16:50:49
发布于:广东
19阅读
0回复
0点赞
#include<iostream> // 头文件
#include<string> // 引入字符串库,用于字符串处理
using namespace std; // 命名空间
// 定义函数t,参数为字符串s,返回值为字符串(统计连续相同字符的个数并拼接)
string t(string s){
string r=""; // 初始化结果字符串r为空
int c=1; // 计数器c,用于记录当前字符连续出现的次数,初始为1
char d=s[0]; // d保存当前要统计的字符,初始为字符串s的第一个字符
// 从字符串的第二个字符开始遍历(索引i从1开始)
for (int i=1;i<s.length();i++){
if(s[i]==d){ // 如果当前字符与要统计的字符d相同
c++; // 计数器加1
}else{ // 如果当前字符与d不同
r+=to_string(c); // 将当前计数器的值转换为字符串,添加到结果r中
r+=d; // 将字符d添加到结果r中
d=s[i]; // 更新d为当前字符
c=1; // 重置计数器为1
}
}
// 循环结束后,处理最后一组连续的字符
r+=to_string(c); // 添加最后一组字符的计数
r+=d; // 添加最后一组的字符
return r; // 返回转换后的结果字符串
}
int main(){
string s; // 存储初始字符串
int n; // 存储转换的次数
cin>>s>>n; // 从输入读取初始字符串和转换次数
// 循环执行n次转换
for(int i=0;i<n;i++) {
s=t(s); // 调用函数t对字符串s进行转换,并将结果重新赋给s
}
cout<<s<<endl; // 输出经过n次转换后的结果字符串
return 0; // 结束
}
紧凑版
#include<iostream>
#include<string>
using namespace std;
string t(string s){
string r="";
int c=1;
char d=s[0];
for (int i=1;i<s.length();i++){
if(s[i]==d){
c++;
}else{
r+=to_string(c);
r+=d;
d=s[i];
c=1;
}
}
r+=to_string(c);
r+=d;
return r;
}
int main(){
string s;
int n;
cin>>s>>n;
for(int i=0;i<n;i++) {
s=t(s);
}
cout<<s<<endl;
return 0;
}
标准版
#include <iostream>
#include <string>
using namespace std;
string t (string s) {
string r = "";
int c = 1;
char d = s[0];
for (int i = 1 ; i < s.length() ; i++) {
if ( s[i] == d ) {
c++;
} else {
r += to_string(c);
r += d;
d = s[i];
c = 1;
}
}
r += to_string(c);
r += d;
return r;
}
int main() {
string s;
int n;
cin >> s >> n;
for(int i = 0 ; i < n ; i++) {
s = t(s);
}
cout << s << endl;
return 0;
}
全部评论 2
OK
6天前 来自 浙江
0想吃的
2026-03-24 来自 浙江
0



















有帮助,赞一个