此题因为是A进B出且C底部封闭,所以此题可以用栈的思想:
#include <iostream>
#include <fstream>
using namespace std;
int Stack[100];
int top,bottom;
void initStack()
{
top = bottom = 0;
return ;
}
void push(int n)
{
Stack[top++] = n;
return ;
}
int pop()
{
int n = Stack[--top];
return n;
}
int getTop()
{
int n = Stack[top-1];
return n;
}
bool isEmpty()
{
if(top == bottom)
{
return true;
}
return false;
}
int findit(int x,int n,int a[])
{
for(int i = 0;i < n;i++)
{
if(a[i] == x)
{
return i;
}
}
}
int main()
{
initStack();
int a[100],b[100];
int n;
cout << "输入车厢数:";
//写入文件
/*
ifstream Cin("in.txt");
cin >> n;
cout << "车厢数:" << n << "个" << endl;
Cin.close();
*/
cin >> n;
for(int i = 1;i <= n;i++)
{
a[i] = i;
}
for(int i = 0;i < n;i++)
{
cin >> b[i];
}
bool flag = true;
int m = 0;
for(int i = 0;i < n;i++)
{
int x = b[i];
if(isEmpty())
{
int lo = findit(x,n,a);
for(int j = m;j <= lo;j++)
{
push(a[j]);
}
m = lo+1;
pop();
}
else if(getTop() == x)
{
pop();
}
else
{
int lo = findit(x,n,a);
if(lo < m)
{
flag = false;
break;
}
for(int j = m;j <= lo;j++)
{
push(a[j]);
}
m = lo+1;
pop();
}
}
if(flag)
{
//文件输入
/*
ifstream Cout("out.txt")
cout << "Yes" << endl;
Cout.close();
*/
cout << "yes" << endl;
}
else
{
//文件输入
/*
ifstream Cout("out.txt")
cout << "Yes" << endl;
Cout.close();
*/
cout << "no" << endl;
}
return 0;
}
不知道题目中的输入和输出格式是打印还是写入文件,所以答者把两种方法都写上了,题者可以自行选择