题目大意:简单,不说了。
思路:从左到右扫描,分两种情况:不是字符’6’,直接输出;是字符’6’,继续往后扫描,统计’6’的个数,然后再输出。
提交代码:
#include<bits/stdc++.h>
using namespace std;
int main(){
string s;
int cnt=0;
getline(cin,s);
for(int i=0;i<s.size();i++){
if(s[i]!='6'){
cout<<s[i];
}else{
cnt++;
i++;
while(i<s.size()&&s[i]=='6'){
cnt++;
i++;
}
if(cnt>9)cout<<"27";
else if(cnt>3&&cnt<=9)cout<<"9";
else {
for(int j=1;j<=cnt;j++)
cout<<"6";
}
cnt=0;
if(i==s.size())return 0;
else i--;
}
}
return 0;
}
带注释代码:
#include<iostream>
#include<vector>
#include<string>
using namespace std;
int main(){
string s;
int cnt=0;
getline(cin,s);
for(int i=0;i<s.size();i++){
if(s[i]!='6'){
cout<<s[i];
}else{
cnt++;
i++;
//别越界
while(i<s.size()&&s[i]=='6'){
cnt++;
i++;
}
if(cnt>9)cout<<"27";
//考试时可能忘了等于9的情况,导致两个测试用例没通过
else if(cnt>3&&cnt<=9)cout<<"9";
else {
for(int j=1;j<=cnt;j++)
cout<<"6";
}
//要重置0
cnt=0;
//到字符串末尾了
if(i==s.size())return 0;
else i--;
}
}
return 0;
}