为什么会不对呢
#include <bits/stdc++.h>using namespace std;
const int N=1e3+10;
int n,b;
int main()
{
cin>>n;
while(cin>>n,n)
{
while(1)
{
int i=1,j=1;
cin>>b; //给定1到n判断是否与其相等
if(!b)
{
break;
}
for(int i=2;i<n;i++)cin>>b;
stack<int> s;
while(i<=n)
{
if(i==b)
{
i++;
j++;//此时顶部的元素为5
}
else
{
s.push(i++); //将其不相等的数全部丢入栈里面
}
while(!s.empty()&&s.top()==b)
{
j++;
s.pop();
}
}
if(j<=n)cout<<"No";
else cout<<"Yes";
}
cout<<endl;
}
}
铁轨那道题 这段代码实现了一个铁轨问题的判断。根据输入的数列,判断是否能够通过一系列的入栈和出栈操作,使得最终栈为空。
然而,这段代码存在一些问题。首先,在读取数列时,只读取了n-2个数,而应该读取n个数。其次,在判断是否能够通过一系列操作使得栈为空时,使用了错误的判断条件。
以下是修改后的代码:
#include <bits/stdc++.h>
using namespace std;
const int N=1e3+10;
int n,b;
int main()
{
cin>>n;
while(cin>>n,n)
{
while(1)
{
int i=1,j=1;
for(int k=1;k<=n;k++) // 读取n个数
cin>>b;
stack<int> s;
while(i<=n)
{
if(i==b)
{
i++;
j++;
}
else
{
s.push(i++);
}
while(!s.empty()&&s.top()==b)
{
j++;
s.pop();
}
}
if(j<=n)
cout<<"No";
else
cout<<"Yes";
cout<<endl;
break;
}
}
}
这样修改后的代码能够正确读取n个数,并且在判断是否能够通过一系列操作使得栈为空时,使用了正确的判断条件。
页:
[1]