[openjudge 6263] 불 표현 식 (스 택)
11159 단어 창고 표현 식 값 구하 기데이터 구조openjudge
입력 입력 은 여러 줄 을 포함 합 니 다. 줄 마다 불 표현 식 이 있 습 니 다. 표현 식 에 빈 칸 이 있 을 수 있 습 니 다. 총 길 이 는 1000 출력 을 초과 하지 않 고 줄 마다 입력 할 수 있 습 니 다. 표현 식 이 사실 이 라면 'V' 를 출력 합 니 다. 그렇지 않 으 면 'F' 샘플 입력 (V | V) & F & (F | V)!V | V & V & !F & (F | V) & (! F | F |! V & V) (F & F | V |! V &! F &! (F | F & V) 샘플 출력 F V V
표현 식 의 값 을 구 하 는 것 과 같이 '!'연산 하면 괄호 우선 순위 가 가장 높 고, 그 다음은 반 을 취한 다음 에 또는 합 과 이다.
#include
#include
#include
#include
#include//
#include
using namespace std;
int r[7][7]={
{' ','|','&','!','(',')','='},
{'|','>','>',',','>','>'},
{'&','>','>',',','>','>'},
{'!','>','>','=',','>','>'},
{'(',',',',','=',' '},
{')','>','>','>',' ','>','>'},
{'=',',',',',' ','='},
// !!V ! ! ! = 5
};
stack<int>opd;//
stack<char>opr;
char ss(char x,char y){
switch(x){
case '|':x=1;break;
case '&':x=2;break;
case '!':x=3;break;
case '(':x=4;break;
case ')':x=5;break;
case '=':x=6;break;
}
switch(y){
case '|':y=1;break;
case '&':y=2;break;
case '!':y=3;break;
case '(':y=4;break;
case ')':y=5;break;
case '=':y=6;break;
}
return r[x][y];
}
char s[1020];
char temp[1020];
void makeinput(char *temp){//
int p=0;
int len=strlen(temp);
for(int i=0;iif (temp[i]==' ') continue;
s[p++]=temp[i];
}
s[p]='=';
s[p+1]='\0';
}
nt ct1(int x,char ch,int y){
switch(ch){
case '|':return x|y;break;
case '&':
return x&y;break;
}
}
int ct2(int x){
return !x;
}
void deal(){
while(!opr.empty())
opr.pop();
int t=0;
opr.push('=');
char ch;
ch=s[t++];
while(ch!='='||opr.top()!='='){
if(ch=='V'||ch=='F'){
if(ch=='V') opd.push(1),ch=s[t++];
else if(ch=='F') opd.push(0),ch=s[t++];
}
else
switch(ss(opr.top(),ch)){
case ':opr.push(ch);ch=s[t++];break;
case '>':{
char cch=opr.top();
opr.pop();
// ! opd
else if(cch=='!'&&!(opd.empty())
{
int x=opd.top();opd.pop();
opd.push(ct2(x));
}
else if(cch=='&'||cch=='|'){
int y=opd.top();opd.pop();
int x=opd.top();opd.pop();
opd.push(ct1(x,cch,y));
//cout<
}
break;
}
case '=':
opr.pop();
ch=s[t++];
break;
}
}
int c=opd.top();
opd.pop();
if(c==1) cout<<"V"<else cout<<"F"<int main(){
while(gets(temp)){
makeinput(temp);
deal();
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Sparse Table을 아십니까? 나는 알고 있다.Sparse Table을 지금 배웠으므로, 메모를 겸해 씁니다. 불변의 수열의 임의의 구간에 대한 최소치/최대치를, 전처리 $O(N\log N)$, 쿼리 마다 $O(1)$ 로 구하는 데이터 구조입니다. 숫자 열의 값...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.