问题 I: 数据结构基础9-火车编组

题目描述

货运火车要在编组站根据挂靠车厢到达目的地重新分组。如果一列火车有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;
}

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值