本文主要是介绍P1928 外星密码题解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目
有了防护伞,并不能完全避免2012的灾难。地球防卫小队决定去求助外星种族的帮助。经过很长时间的努力,小队终于收到了外星生命的回信。但是外星人发过来的却是一串密码。只有解开密码,才能知道外星人给的准确回复。解开密码的第一道工序就是解压缩密码,外星人对于连续的若干个相同的子串X会压缩为[DX]的形式(D是一个整数且1≤D≤99),比如说字符串CBCBCBCB就压缩为[4CB]或者[2[2CB]],类似于后面这种压缩之后再压缩的称为二重压缩。如果是[2[2[2CB]]][则是三重的。现在我们给你外星人发送的密码,请你对其进行解压缩。
输入输出格式
输入格式
输入一行,一个字符串,表示外星人发送的密码。
输出格式
输出一行,一个字符串,表示解压缩后的结果。
输入输出样例
输入样例
AC[3FUN]
输出样例
ACFUNFUNFUN
解析
假设只有一层方括号,那么只需要找到方括号,就可以读到重复次数,然后将该重复的部分拼接指定的次数后还原。把一对方括号作为“压缩区”。如果方括号的“重复部分“里还有方括号呢?没关系,设法把里面的方括号继续展开即可。因此可以写成递归函数,代码如下:
#include<iostream>
#include<string>
using namespace std;
string expand(){string s="",x;char c;int D;while(cin>>c){//持续输入字符,直到全部读完 if(c=='['){//发现一个压缩区 cin>>D;x=expand(); //递归地读入x while(D--){//重复D次x并进行拼接 s+=x;}}else if(c==']'){//压缩区结束,返回已经处理好的x return s;}else{//如果不是'['和']',那还是x的字符,加进去即可 s+=c;}}return s;
}
int main(){cout<<expand();return 0;
}
这篇关于P1928 外星密码题解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!