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;
}