C++基礎練習題之打怪

打怪

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招"
			}
	}
}


發佈了89 篇原創文章 · 獲贊 120 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章