我正在做 UVa Online Judge Question - 11995。调试后我发现一些让我感到困惑的事情。
这是我调试之前的代码部分,我收到“运行时错误”。
int take;
scanf("%d", &take);
int out_s;
int out_q;
int out_p;
if(sta){
out_s = s.top();
if(!s.empty() && out_s == take) s.pop();
else sta = 0;
}
if(que){
out_q = q.front();
if(!q.empty() && out_q == take) q.pop();
else que = 0;
}
if(pri){
out_p = p.top();
if(!p.empty() && out_p == take) p.pop();
else pri = 0;
}
在我只是简单地删除了一些愚蠢的整数分配之后,我得到了“接受”
int take;
scanf("%d", &take);
if(sta){
if(!s.empty() && s.top() == take) s.pop();
else sta = 0;
}
if(que){
if(!q.empty() && q.front() == take) q.pop();
else que = 0;
}
if(pri){
if(!p.empty() && p.top() == take) p.pop();
else pri = 0;
}
我真的不明白为什么我得到一个运行时错误只是因为分配了变量。
这是我的全部代码:
using namespace std;
int main ()
{
int n;
while(scanf("%d", &n) != EOF){
int comm;
stack<int> s;
queue<int> q;
priority_queue<int> p;
bool sta = 1;
bool que = 1;
bool pri = 1;
for(int i = 0; i < n; i++){
scanf("%d", &comm);
if(comm == 1){
int input;
scanf("%d", &input);
s.push(input);
q.push(input);
p.push(input);
}
else{
int take;
scanf("%d", &take);
int out_s;
int out_q;
int out_p;
if(sta){
out_s = s.top();
if(!s.empty() && out_s == take) s.pop();
else sta = 0;
}
if(que){
out_q = q.front();
if(!q.empty() && out_q == take) q.pop();
else que = 0;
}
if(pri){
out_p = p.top();
if(!p.empty() && out_p == take) p.pop();
else pri = 0;
}
}
}
if(sta == 1 && que == 0 && pri == 0) printf("stack\n");
else if(sta == 0 && que == 1 && pri == 0) printf("queue\n");
else if(sta == 0 && que == 0 && pri == 1) printf("priority queue\n");
else if(sta == 0 && que == 0 && pri == 0) printf("impossible\n");
else printf("not sure\n");
}
return 0;
}