0
点赞
收藏
分享

微信扫一扫

洛谷P1928 外星密码

清冷的蓝天天 2022-02-16 阅读 6

传送门:https://www.luogu.com.cn/problem/P1928

再次感受到递归的魅力。

题目中的单次解压并不能太让人能感受到递归的思想,但对于多重解压,就是一层套一层的结构,先把最里层的解压后,再解压次里层。。。递归思想就出来了。

把框外的单词视为主串,框内的单词视为次串。那么主串的单词不需要解压,次串需要解压。此时对于这个去掉框的次串来说,它就是主串,而它的框内单词就是次串。。。

还有一点,C++的string真香

#include<iostream>
#include<cstring>
using namespace std;
string Read() {
	char ch; int num;
	string Smain="", Snext = "";
	//这个Smain是[]外的字母,Snext是[]的字母
	//别忘了初始化
	while (cin >> ch) {
		//循环读入
		if (ch == '[') {
			cin >> num;
			//读入数字
			Snext = Read();
			//递归框内的字母
			while (num > 0) { Smain += Snext; num--; }
			//解压,把数字还原成字母
		}
		else if (isalpha(ch))Smain += ch;
		//非框内字母直接加
		else break;
		//只要是]直接跳出循环
	}
	return Smain;
}
int main(void)
{
	cout << Read();
	return 0;//完结撒花
}

 

举报

相关推荐

洛谷 P1307

洛谷p1551

洛谷P1309

洛谷p1135

P1217(洛谷)

洛谷p1443

洛谷P2084

洛谷P1090

洛谷 P1001

洛谷P1464

0 条评论