C++基础练习题之打怪
2017-07-15 09:33
204 查看
打怪
Sample
![](https://img-blog.csdn.net/20170715092012199)
Hint
序列长度在 1~1000000 之间。
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招" } } }
相关文章推荐
- C++基础练习题之队列(不是queue,只是一道题,千万别误会)
- UVa-10815-Andy's First Dictionary c++ STL set 基础练习题
- C++基础练习题之湖的深度
- C++基础练习题(一): 查找最短单词
- 【C++基础学习】关于C++静态数据成员
- C02-程序设计基础提高班(C++)第6周上机任务-数组
- [C++基础]重载、覆盖、多态与函数隐藏(3)
- halcon/c++接口基础 之 halcon初认识
- 动态规划基础练习题
- C++语言基础 —— 一个Java程序员的视角
- c++基础学习2-c++中的引用
- [C++基础]042_用Visual Studio的命令行编译源码
- 【Linux基础】简单的C++程序
- c/c++基础记录
- Linux下使用Vim进行C/C++ 编程基础知识详解
- C++语法基础--泛型算法(generic algorithm)--插入迭代器back_inserter(),front_insertor(),inserter()以及next()函数简介
- c++基础知识整理二
- c/c++基础(二十七) Linux下core文件调试方法
- c++基础
- 心动C++ 情牵基础算法III