天梯赛L1-058 6翻了

发布时间 2023-05-06 19:30:13作者: 我爱软工

一、问题描述

666.JPG

“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

二、设计思路

(1)从键盘接收一个字符串s;

(2)遍历字符串s,如果不是6则直接输出,如果是6,对应记录器k的值++;

(3)在每次接收完一连串6之后对k的值进行判断,如果k<=3,则输出k个6并将k置为0,如果k>3&&k<=9,将一串字符串替换成9并将k置为0,如果k>9,则输出27并将k置为0;

(4)特殊情况:考虑字符串的最后全是6,需要单独给出解决方法,在这种情况下k>0,再按照(3)中的方法相应进行输出;

三、程序流程图

 

四、伪代码

五、代码

 1 #include <iostream>
 2 using namespace std;
 3 int main()
 4 {
 5     string s;
 6     getline(cin,s);
 7     int k=0;  //记录6的个数
 8     for(int i=0;i<s.length();i++)
 9     {
10         if(s[i]=='6')
11         {
12             k++;
13         }
14         else
15         {
16             if(k<=3)
17             {
18                 for(int j=0;j<k;j++)
19                 {
20                     cout<<"6";
21                 }
22             }
23             else if(k>3&&k<=9)
24             {
25                 cout<<"9";
26             }
27             else if(k>9)
28             {
29                 cout<<"27";
30             }
31             k=0;
32             cout<<s[i];
33         }
34     }
35     if(k>0)
36     {
37         if(k<=3)
38         {
39             for(int i=0;i<k;i++)
40             {
41                 cout<<"6";
42             }
43         }
44         else if(k>3&&k<=9)
45         {
46             cout<<"9";
47         }
48         else if(k>9)
49         {
50             cout<<"27";
51         }
52     }
53     return 0;
54 }

 

六、总结

(1)getline(cin,s)函数可以接收带空格的字符串;

(2)遍历字符串每个元素可用for循环,字符串长度s.length();

(3)特殊情况需要注意单独考虑,此题中需要考虑最后一串是若干个6的情况,完成对应的输出;

(4)涉及到若干个相同元素在一起对应不同输出情况的时候,可以用k作为计数器,来进行相应的输出,之后将计数器k置为0,继续使用,直到完成要求;