这道题我写了很长时间,一共想了两个思路-其实很简单
第一个思路:
统计相邻6的个数然后进行删除,但后来发现删除并不容易需要后面的都要往前移动,就很麻烦。
第二个思路:
用for循环直接进行输出然后到输出6是进行特判,特判这里有小技巧,判的是整串相连的6所有直到不等于6时cnt停止计数,先判断高条件再判断低条件。
注意:有可能最后还有6但最后for循环已经停止,此时cnt已经记录了前面字符串6的个数再在for循环之外再次特判便可得出答案
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main()
{
string s;
int cnt=0;
getline(cin,s);
for(int i=0;i<s.length() ;i++)
{
if(s[i]=='6')
{
cnt++;
}else
{
if(cnt>9)
{
cout<<"27";
}else if(cnt>3)
{
cout<<'9';
}
else
while(cnt)
{
cout<<'6';
cnt--;
}
cnt=0;
cout<<s[i];
}
}
if(cnt>9) //处理最后一个
{
cout<<"27";
}else if(cnt>3)
{
cout<<'9';
}
else
while(cnt)
{
cout<<'6';
cnt--;
}
return 0;
}