本文主要是介绍铁轨问题(栈操作),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目
输入输出结果
理解
刚开始一直没理解输入的序列是进入C的还是进入B的序列(当然答案是进入B的序列),然后进入C的序列是按顺序的1,2,3…….
代码
#include <iostream>
#include <cstdio>
#include <stack>
using namespace std;
const int maxn=1000;int target[maxn];
int n;int main()
{while(cin>>n){stack<int>s;int A=1;int B=1;for(int i=1;i<=n;i++){cin>>target[i];//该目标序列就是进入B车站的序列}int flag=1;while(B<=n){//入栈顺序和出栈顺序相同,此语句执行到底if(A==target[B]){A++;B++;}//入栈顺序与出栈顺序相反(逆序),则此语句执行到底//当栈为空返回trueelse if(!s.empty()&&s.top()==target[B]){s.pop();B++;}//入栈操作,将可进栈元素进栈,还有一个作用是调整车厢为逆序出中转站else if(A<=n){s.push(A);A++;}//即不顺序也不逆序,就比如3,4,1,2这种是不存在的else{flag=0;break;}}if(flag){cout<<"YES\n";}else{cout<<"NO\n";}}return 0;
}
图片演示
进入B序列为1,2,3
进入B序列为3,2,1
这篇关于铁轨问题(栈操作)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!