有了防护伞,并不能完全避免 2012 的灾难。地球防卫小队决定去求助外星种族的帮助。经过很长时间的努力,小队终于收到了外星生命的回信。但是外星人发过来的却是一串密码。只有解开密码,才能知道外星人给的准确回复。解开密码的第一道工序就是解压缩密码,外星人对于连续的若干个相同的子串 X \texttt{X}X 会压缩为 [DX] \texttt{[DX]}[DX] 的形式(D DD 是一个整数且 1 ≤ D ≤ 99 1\leq D\leq991≤D≤99),比如说字符串 CBCBCBCB \texttt{CBCBCBCB}CBCBCBCB 就压缩为 [4CB] \texttt{[4CB]}[4CB] 或者[2[2CB]] \texttt{[2[2CB]]}[2[2CB]],类似于后面这种压缩之后再压缩的称为二重压缩。如果是 [2[2[2CB]]] \texttt{[2[2[2CB]]]}[2[2[2CB]]] 则是三重的。现在我们给你外星人发送的密码,请你对其进行解压缩。\n\n输入格式\n输入一行,一个字符串,表示外星人发送的密码。\n\n输出格式\n输出一行,一个字符串,表示解压缩后的结果。 用C语言运用递归完成这个题目
时间: 2023-04-10 08:04:08 浏览: 154
3d漫画地球防卫部队 [威猛善战的人体防卫部队,说明文阅读答案] .docx
这是一个编程类的问题,可以回答。以下是使用 C 语言递归实现解压缩的代码:
```c
#include <stdio.h>
#include <string.h>
void decompress(char *s, int len, int start, int end) {
int i = start;
while (i < end) {
if (s[i] == '[') {
int j = i + 1, cnt = 1;
while (cnt > 0) {
if (s[j] == '[') cnt++;
else if (s[j] == ']') cnt--;
j++;
}
int k = j + 1, num = 0;
while (s[k] >= '0' && s[k] <= '9') {
num = num * 10 + s[k] - '0';
k++;
}
for (int l = 0; l < num; l++) {
decompress(s, len, i + 1, j - 1);
}
i = k;
} else {
printf("%c", s[i]);
i++;
}
}
}
int main() {
char s[1000];
scanf("%s", s);
int len = strlen(s);
decompress(s, len, 0, len);
return 0;
}
```
注意,这个代码并没有处理输入格式和输出格式,需要根据题目要求进行修改。
阅读全文