P1928 外星密码(递归)(栈)

在这里插入图片描述

思路

起初看到这题的时候,一脸懵逼不知道该怎么写,我是这么想的一来就把所有的数据都输入,但是然后就不知道怎么写了。
当我看到别人的思路才没明白,原来一个一个输入才是正确的。
1.先寻找左括号,然后输入次数,再把次数叠加(再次递归,因为继续输入的不是左括号,右括号,直接加上去就行了)
2.找到了右括号,则直接返回就行。

源码

#include<bits/stdc++.h>

using namespace std;

string fun(){
	int n;
	string s="",s1;
	char c;
	while(cin>>c){   //读入一个字母 
		if(c=='['){  //若为左括号,则输入继续输入 
			cin>>n;
			s1=fun();
			while(n--) s+=s1;
		}
		else
		{
			if(c==']')  return s;  //匹配到右括号,则返回。 
			else s+=c;
		}
	}
}

int main(){
	cout<<fun();
	return 0;
}

源码

//运用栈,判断 [ 和数字
//递归 
#include<bits/stdc++.h>

using namespace std;

string expand(){
	string s="",X;
	char c;int D;
	while(cin>>c){
		if(c=='['){
			cin>>D;   //输入完数字后,则到 ] 都要输入,用X来存储 
			X = expand();
			while(D--) s +=X;//数字是几,则扩大几倍 
			
		}
		else if(c==']') return s; //结束条件 
		else s+=c;  //存储数字后的字符  返回后,则存于X里 
	}
	return s;
} 
int main(){
	cout<<expand()<<endl;
	return 0;
}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ღ江晚吟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值