题目链接 :http://poj.org/problem?id=1363
此题是一个模拟栈的问题 题目意思:有一列火车,车厢编号是1~N,只能由一端进站,另一端出站,判断下列出站顺序是否有可能
思路:判断序列元素是否与栈顶元素相等,若与栈顶元素相等,则栈顶指针递减,继续判断
代码:注意输出Yes和输出格式
#include <iostream>
#include <cstdio>
#include <cstring>
#include <stack>
using namespace std;
int main()
{
int n,a[1100];
while(scanf("%d",&n)!=EOF,n)
{
scanf("%d",&a[1]);
if(a[1]==0)
printf("\n");
while(a[1]!=0)
{
for(int i=2; i<=n; i++)
{
scanf("%d",&a[i]);
}
int j=1;
int top=0;
int stack[1100];
for(int i=1; i<=n; i++)
{
stack[++top]=i;
while(top&&stack[top]==a[j])
{
top--;
j++;
}
}
if(top==0)
printf("Yes\n");
else
printf("No\n");
scanf("%d",&a[1]);
if(a[1]==0)
printf("\n");
}
}
return 0;
}
此题是一个模拟栈的问题 题目意思:有一列火车,车厢编号是1~N,只能由一端进站,另一端出站,判断下列出站顺序是否有可能
思路:判断序列元素是否与栈顶元素相等,若与栈顶元素相等,则栈顶指针递减,继续判断
代码:注意输出Yes和输出格式
#include <iostream>
#include <cstdio>
#include <cstring>
#include <stack>
using namespace std;
int main()
{
int n,a[1100];
while(scanf("%d",&n)!=EOF,n)
{
scanf("%d",&a[1]);
if(a[1]==0)
printf("\n");
while(a[1]!=0)
{
for(int i=2; i<=n; i++)
{
scanf("%d",&a[i]);
}
int j=1;
int top=0;
int stack[1100];
for(int i=1; i<=n; i++)
{
stack[++top]=i;
while(top&&stack[top]==a[j])
{
top--;
j++;
}
}
if(top==0)
printf("Yes\n");
else
printf("No\n");
scanf("%d",&a[1]);
if(a[1]==0)
printf("\n");
}
}
return 0;
}