洛谷刷题C 语言 | P1928 外星密码

洛谷刷题C 语言 | P1928 外星密码

首页休闲益智外星娃娃机更新时间:2024-04-29

学习C 从娃娃抓起!记录下洛谷C 学习和备考过程中的题目,记录每一个瞬间。

附上汇总贴:


【题目描述】

有了防护伞,并不能完全避免 2012 的灾难。地球防卫小队决定去求助外星种族的帮助。经过很长时间的努力,小队终于收到了外星生命的回信。但是外星人发过来的却是一串密码。只有解开密码,才能知道外星人给的准确回复。解开密码的第一道工序就是解压缩密码,外星人对于连续的若干个相同的子串 X 会压缩为 [DX] 的形式(D 是一个整数且1≤D≤99),比如说字符串 CBCBCBCB 就压缩为 [4CB] 或者[2[2CB]],类似于后面这种压缩之后再压缩的称为二重压缩。如果是 [2[2[2CB]]] 则是三重的。现在我们给你外星人发送的密码,请你对其进行解压缩。

【输入】

输入一行,一个字符串,表示外星人发送的密码。

【输出】

输出一行,一个字符串,表示解压缩后的结果。

【输入样例】

AC[3FUN]

【输出样例】

ACFUNFUNFUN

【代码详解】

#include <bits/stdc .h> using namespace std; string f(string s) { string ans; //对s中的每个字符进行遍历 for (int i=0; i<s.length(); i ) { //如果找到的字符未加密,则添加到ans中 if (s[i]!='[') { ans = s[i]; continue; } //如果找到的字符加密了,抽取D和X int mark=i 1, d=0, right = 1; while (s[mark]>='0' && s[mark]<='9') { d = d*10 s[mark] - '0'; mark ; } for (int j=i 1; ; j ) { if (s[j]=='[') right ; if (s[j]==']') right--; if (right==0) { string x = s.substr(mark, j-mark); x = f(x); //将D个X添加到ans中 for (int k=1; k<=d; k ) ans = x; i = j; break; } } } return ans; } int main() { string s; cin >> s; cout << f(s); return 0; }

【运行结果】

AC[3FUN] ACFUNFUNFUN

查看全文
大家还看了
也许喜欢
更多游戏

Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved