小猴编程C++ | 浏览器

学习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
?

猜你喜欢

转载自blog.csdn.net/guolianggsta/article/details/134066733
今日推荐