| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
谁能帮忙看看 贡献了不少WA了 给几个测试数据也行 谢了...#include <iostream>
#include <cstdio>
#include <cstring>
#include <map>
using namespace std;
int operater[200]; //1
int operand[200]; //2
map <char,int> isp; //栈内优先数
map <char,int> icp; //栈外优先数
char f[2]={'F','V'};
int top1,top2;
void init(){
isp['(']=1; isp['&']=5; isp['|']=3; isp['!']=6; isp[')']=8;
icp['(']=8; icp['&']=4; icp['|']=2; icp['!']=7; icp[')']=1;
return ;
}
void cal(char c){
int num,left,right;
if(c=='!'){
num=operand[--top2]=='V'?1:0;
operand[top2++]=f[!num];
}
else {
right=operand[--top2]=='V'?1:0;
left=operand[--top2]=='V'?1:0;
if(c=='|'){
operand[top2++]=f[left||right];
}
else if(c=='&'){
operand[top2++]=f[left&&right];
}
}
return ;
}
int main(){
init();
int kase=0;
char ch;
while((ch=getchar())!=EOF){
top1=top2=0;
while(1){
if(ch=='\n'||ch==EOF) break;
if(ch==' '){
ch=getchar();
continue;
}
else if(ch=='V'||ch=='F'){
operand[top2++]=ch;
ch=getchar();
}
else {
if(top1&&icp[ch]<isp[operater[top1-1]]){
cal(operater[--top1]);
}
else if(top1&&icp[ch]==isp[operater[top1-1]]){
--top1;
ch=getchar();
}
else{
operater[top1++]=ch;
ch=getchar();
}
}
}
if(ch=='\n'){
while(top1){
cal(operater[--top1]);
}
printf("Expression %d: %c\n",++kase,operand[top2-1]);
}
else if(ch==EOF) break;
}
return 0;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator