洛谷P1928 外星密码

传送门: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;//完结撒花
}

 

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值