“666”是一种网络用语,大概是表示某人很厉害、我们很佩服的意思。最近又衍生出另一个数字“9”,意思是“6翻了”,实在太厉害的意思。如果你以为这就是厉害的最高境界,那就错啦 —— 目前的最高境界是数字“27”,因为这是 3 个 “9”!
本题就请你编写程序,将那些过时的、只会用一连串“6666……6”表达仰慕的句子,翻译成最新的高级表达。
输入格式:
输入在一行中给出一句话,即一个非空字符串,由不超过 1000 个英文字母、数字和空格组成,以回车结束。
输出格式:
从左到右扫描输入的句子:如果句子中有超过 3 个连续的 6,则将这串连续的 6 替换成 9;但如果有超过 9 个连续的 6,则将这串连续的 6 替换成 27。其他内容不受影响,原样输出。
输入样例:
it is so 666 really 6666 what else can I say 6666666666
输出样例:
it is so 666 really 9 what else can I say 27
下面的第一个代码有点问题,针对它我进行了改进优化,写出了第二个代码,可以直接看第二个代码
代码一:
#include<bits/stdc++.h>
using namespace std;
int main()
{
string str;
getline(cin,str);
int num=0;
//(1)替换成‘9’的情况
for(int pos=0;pos<str.length();pos++)
{
if(str[pos]=='6')
{
num++;
}
if(num>=4&&num<=9&&str[pos]!='6')
{
str.replace(pos-num,num,"9");
pos=pos-num;
num=0;
}
if(str[pos]!='6')
num=0;
}
num=0; //及时归0
//(2)替换成‘27’的情况
for(int pos=0;pos<str.length();pos++)
{
if(str[pos]=='6')
{
num++;
}
if((num>9&&(str[pos]!='6'))||(num>9&&pos==str.length()-1))
{
str.replace(pos+1-num,num,"27");//注意此处的pos+1-num 应与情况(1)中的 pos-num相区别!!
pos=pos-num;
num=0;
}
if(str[pos]!='6')
num=0;
}
cout<<str<<endl;
return 0;
}
代码二
#include<bits/stdc++.h>
using namespace std;
int main(){
string str;
getline(cin,str);
for(int i=0;i<str.length();i++){
int sum=0;
if(str[i]=='6'){
for(int j=i;str[j]=='6';j++){
sum++;
}
if(sum>3&&sum<=9)
str.replace(i,sum,"9");
if(sum>9)
str.replace(i,sum,"27");
}
}
cout<<str;
return 0;
}