学习C++从娃娃抓起!记录下在学而思小猴编程学习过程中的题目,记录每一个瞬间。侵权即删,谢谢支持!
附上汇总贴:小猴编程C++ | 汇总-CSDN博客
【题目描述】
小猴为了提高自己的实力,经常在各大网站刷题。然后他发现浏览器都会有三个操作:访问、前进和后退,小猴很好奇这三种操作的工作原理,在网上查询相关资料并结合自己的实践之后,发现它们的工作原理如下:
访问:访问操作需要用户提供一个网址,浏览器将会访问该网址,并将该网址的前继设为跳转前的网址。
后退:后退操作会检查当前网址是否有前继(除第一个网址外,每个网址都有前继),如果有,浏览器将访问当前网址的前继。
前进:前进操作时用于抵消后退的:
- 若前一步是后退,浏览器退回后退前的网页。
- 若前一步是访问,忽略这条前进操作(即前进的按钮未灰色,无法点击)。
- 若前一步也是前进,若上一步前进已经抵消了一个后退,则根据更早的操作确定前进的作用,否则,忽略这条操作。
现在小猴给定 n 条操作,请你模拟浏览器的行为,并输出它执行每条操作时所访问的网址。
【输入】
第一行,包含一个整数 n。
接下来 n 行,每行表示一步操作:
- 访问操作:以字符 V 开头,后接一条网址,保证网址中间没有空格或者其他不可见字符。
- 后退操作:以字符 B 表示。
- 前进操作:以字符 F 表示。
【输出】
共 n 行,对每一步操作:
- 如果浏览器访问了某个网址,则输出该网址;
- 如果浏览器忽略了这步操作,则输出一个 ?。
【输入样例】
10
V noi.cn
V xiaohoucode.com
V baidu.com
B
B
F
F
F
V gesp.ccf.org.cn
F
【输出样例】
noi.cn
xiaohoucode.com
baidu.com
xiaohoucode.com
noi.cn
xiaohoucode.com
baidu.com
?
gesp.ccf.org.cn
?
【代码详解】
#include <bits/stdc++.h>
#include <stack>
using namespace std;
int n;
stack<string> A, B;
int main()
{
cin >> n;
for (int i=1; i<=n; i++) {
char op;
string s;
cin >> op;
if (op == 'V') {
cin >> s;
A.push(s);
cout << s << endl;
while (B.size()>0) B.pop();
} else if (op=='B') {
if (A.size()<2) cout << "?" << endl;
else {
B.push(A.top());
A.pop();
cout << A.top() << endl;
}
} else {
if (B.size()==0) cout << "?" << endl;
else {
A.push(B.top());
B.pop();
cout << A.top() << endl;
}
}
}
return 0;
}
【运行结果】
10
V noi.cn
noi.cn
V xiaohoucode.com
xiaohoucode.com
V baidu.com
baidu.com
B
xiaohoucode.com
B
noi.cn
F
xiaohoucode.com
F
baidu.com
F
?
V gesp.ccf.org.cn
gesp.ccf.org.cn
F
?