Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

能过sample,!!!!!F,((((((V))))))这些数据逻辑上应该没有问题啊

Posted by frkstyc at 2005-06-15 22:16:10 on Problem 2106
In Reply To:又加了一点注释 能不能帮忙看看 或是给个出错的数据 谢了 Posted by:nestle at 2005-06-15 22:14:20
> #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;  //运算符栈的栈顶 
> int 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();
>          }//V或F就进操作数的栈    
>          
>          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:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator