题目描述
货运火车要在编组站根据挂靠车厢到达目的地重新分组。如果一列火车有4节车厢,经过编组后,车厢的编组顺序为3,2,4,1;您知道编组站是怎么编组的吗?小明到编组站参观后发现编组站的铁路有很多岔道,火车在岔道上来来回回地开动,最后列车编组就完成了。小明想到学习过的栈操作,发现火车编组的过程就是由若干进栈,出栈操作构成的。于是小明编了一个程序,只要知道最后的编组要求,就能将编组方案输出。
输入
第1行1个正整数n,n<=100
第2行n个小于或等于n的正整数,表示有n节车厢,编号为1,2,3,……,n;编组时按照编号进栈,第2行表示列车经过编组后的车厢编号顺序;
输出
一行一个由大写字母A和B构成的字符串,A表示进栈,B表示出栈。表示编组时进栈出栈的操作序列;
样例输入 Copy
【输入样例1】 4 3 2 4 1 【输入样例2】 10 1 3 5 6 4 8 7 10 9 2
样例输出 Copy
【输出样例1】 AAABBABB 【输出样例2】 ABAABAABABBAABBAABBB
中间有一行代码trains.empty()前往不能忘记,不能只看他有没有达到出栈的要求,还有一种需要考虑到的情况就是目前栈中的元素已经出完了为空,因此就需要判断这个栈是不是空的
总的来说这算是一道比较简单的入门栈题,如果大家刚开始学栈的话我推荐先做这个,因为我也是刚入门c++中的数据结构栈
#include<iostream>
#include<stack>
using namespace std;
stack<int> trains;
int a[1000];
int main()
{
int n;
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> a[i];
}
int count = 1;
trains.push(count);
cout << "A";
int flag;
count++;
for (int i = 0; i < n; i++)
{
flag = a[i];
while(trains.empty()||trains.top() < flag)
{
trains.push(count);
count++;
cout << "A";
}
if (trains.top() == flag)
{
trains.pop();
cout << "B";
continue;
}
}
return 0;
}