编号为1-n的火车经过一个栈后,判断能否实现输入的序列。
思想是将输入元素以数组形式存储,将1-n的序列放入栈中,然后将栈顶元素与数组中的首元素进行比对,若相同则将栈顶元素pop掉,并将数组元素向后加一,这样依次进行,若将整个数组都遍历了一遍则满足条件,此时为Yes,否则为No。
需要注意的是数组是将首元素和其余的元素分开来输入的,这样能保证在数组首元素为0的时候break,即满足题目要求。
代码如下:
#include<iostream>
#include<stack>
using namespace std;
int main() {
int n, a[1050];
while (cin>>n &&n) {
while (cin>>a[0] && a[0]) {
for (int i = 1 ; i < n ; i++) {
cin>>a[i];
}
int j = 0;
stack<int>station;
for (int i = 1 ; i <= n ; i++) {
station.push(i);
while (!station.empty() && a[j] == station.top()) {
j++;
station.pop();
}
}
if (j == n)
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}
cout<<endl;
}
return 0;
}