换个思路吧》简单点
解题思路:针对每一个火车,有入站出站2种状态,判断是否入站条件为:首先栈为空,入栈;再次栈不为空并且顶栈元素不等于出栈的序列元素,出栈条件:栈不为空,栈顶元素等于出站序列;记录出入状态用记录数组(大小是2倍序列)数组中下标用2个变量控制的巧妙运用;最后用战是否为空来判断出站序列是否合理;(合理为空)并输出出入状态;
#include
#include
#include
using namespace std;
int main(int argc, char* argv[])
{
int n;
string in,out;
int jl[20];
while(cin>>n>>in>>out)
{
int i=0;int j=0 ;
stack
for(i;i
if(s.empty())
{
s.push(in[i]);
jl[i+j]=0;
i++;
}
if(!s.empty()&&s.top()!=out[j])
{
s.push(in[i]);
jl[i+j]=0;
i++;
}
while(!s.empty()&&s.top()==out[j])
{
s.pop();
jl[i+j]=1;
j++;
}
}
if(s.empty())
{
cout<<"Yes.\n";
for(int k=0;k<2*n;k++)
{
if(jl[k]!=1)
cout<<"in\n";
else
cout<<"out\n";
}
cout<<"FINISH\n";
}
else
{
cout<<"No.\n";
cout<<"FINISH\n";
}
}
return 0;
}
注意事项:
1 对状态变化的记录数组的引用变量的控制;
2 学会利用状态的变化,导致的最终状态,来判断一个分配问题是否合理;