您的位置:首页 > 编程语言 > C语言/C++

C++基础练习题之打怪

2017-07-15 09:33 204 查看
打怪

Description

电视剧里奥特曼和怪兽打了起来。怪兽会三个招数,分别用字符’R’, ‘B’,’L’表示。奥特曼为了应对这三招,需要对应使出‘S’、‘K’、‘H’等三招。如果怪兽按任意的顺序连续使出’R’, ‘B’,’L’这三招(称为“组合拳”),则威力大增。奥特曼必须使出终极大招才能战胜,用‘C’表示。奥特曼的终极大招可以一次性化解怪兽的一次组合拳。怪兽后续出招要么是单独的新招,要么是另一次组合拳的一部分。怪兽的任一招都不会属于 2 次或更多次的组合拳。奥特曼从编剧那里提前获得了怪兽出招的顺序,他应该以怎样的顺序出招,才能战胜怪兽呢?

Input

一个字符串,表示怪兽的出招序列。序列长度在 1~1000000 之间。

Output

一个字符串,表示奥特曼的出招序列。

Sample



Hint

序列长度在 1~1000000 之间。

实现代码

代码如下:

#include<cstdio>
#include<cstring>
char way[1000005]={}; //怪兽的出招顺序(初值为'\0')
int main()
{
gets(way); //输入怪兽的出招顺序
for(int i=0;i<strlen(way);i++) //枚举怪兽的每一招
{
if(way[i]+way[i+1]+way[i+2]=='R'+'B'+'L') //判断是否是"组合拳",同时也判断way[i...i+1]是否有值(即i+2在strlen(way)范围内)
{
printf("C");//使用大招
i+=2; //跳过i+1、i+2(因为它们属于"组合拳")
}
else //如果为单独的新招
switch(way[i]) //枚举怪兽的"招式"是什么,并使出对应"招式"化解
{
case 'R':printf("S");break; //当怪兽使用"R招"时,奥特曼使出"S招"
case 'B':printf("K");break; //当怪兽使用"B招"时,奥特曼使出"K招"
case 'L':printf("H");break; //当怪兽使用"L招"时,奥特曼使出"H招"
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: