P1928 外星密码

发布时间 2023-12-19 20:32:53作者: 拍手称快

P1928 外星密码

一道经典递归题(但我没想出来)

问题

题目给的是一行的字符串。
我一开始想直接对字符串进行处理,但发现非常麻烦,因为要对字符串做拆分,而且很难对括号[]做对应,也对数字字符整体判断麻烦,总体实现起来繁琐复杂。

正确思路

将字符串拆成每个字符,再读入,对每个读入判断,以读取到'['为开始做递归。(括号内的格式是相同的,所以可以用相同判断形式)

优点

字符读入判断非常简单,且再读入数字时可以直接读入整体数字。
将每个括号中递归可以减少代码量。

#include <iostream>
#include <string>
#include <algorithm>
#include <cmath>
#define ll long long
using namespace std;

string expand() {
	string s = "", n;
	int m;
	char a;
	while (cin >> a) {
		if (a == '[') {
			cin >> m;
			n = expand();
			for (int i = 1; i <= m; i++) {
				s += n;
			}

		} else if (a == ']') {
			return s;
		} else {
			s += a;
		}
	}
	return s;
}

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