zoukankan      html  css  js  c++  java
  • 结题报告

    题目:点此

    思路:{

        利用两个栈,一个存数据(v、f),一个存运算符(&&、||、!、(、))。

        读到数据压入数据栈。

     读到!:直接压栈。

        读到运算符:{

            如果符号栈栈顶的优先级没此运算符高,直接压栈。

            否则取出数据栈栈顶和数据栈新的栈顶进行运算,符号栈出栈,再判断一遍栈顶优先级有没有此运算符高。

       }

        读完后把剩下的运算算完,栈顶是结果。

    }

    其实布尔表达式与普通表达式没什么区别,只是优先级不一样,数字换成了真假。参见普通表达式结题报告。

    犯的错误:{

      1.第四十二行的if里没加continue,也就是如果进了if就会执行后面的语句,这不是我们想要的。

      2.在写 读入字符串的方法 时,为了告诉你们该包哪个头文件时,此代码的半成品被用作试验品,试验好了以后没把代码复原。

      3.粘贴普通表达式的代码时,没对代码进行修改。

      4.因考虑的不周全,表示优先级的二维表打错了。

    5.没考虑空格。

    6.遇到括号应该出栈,而不是结束循环。

    }

    收获:{

      1.最好老老实实地打if-else,以防漏continue(if…else…=if…continue; …)。

    2.试验完了之后别忘了复原。

    3.最好老老实实的写,不要复制粘贴。

    4.二维表一定要认真考虑之后再打。

    5.要考虑周全,为防止错,可以用if…else if…else…。

    6.不要想当然。

    7.读多行的方法:

    string line;
     while(getline(cin,line)){
      for(int i=0;i<line.size();i++)
      { 。。。。。。。。。。。}
                    while(){
                    ............................}
                 }

    }

    题目AC代码:

     1 #include <iostream>
     2 #include <stack>
     3 #include <string.h>
     4 using namespace std;
     5 int b[5][6];
     6 stack <bool> data;
     7 stack <char> symbol;
     8 int change(char a){
     9     switch(a){
    10         case '&':return 0;
    11         case '|':return 1;
    12         case '!':return 2;
    13         case '(':return 3;
    14         case ')':return 4;
    15         case '@':return 5;
    16     }
    17 }
    18 int main(){
    19     memset(b,0,sizeof(b));
    20     for(int i=4;i>=0;i--){
    21         b[i][3]=1;
    22         b[i][5]=1;
    23         b[i][4]=1;
    24         b[3][i]=1;
    25     }
    26     b[4][4]=0;
    27     b[0][1]=1;
    28     string a;
    29     symbol.push('@');
    30     data.push(false);
    31     while(getline(cin,a)){
    32         for(int i=0;i<a.length();i++){
    33             if(a[i]==' '){
    34                 continue;
    35             }
    36             if(a[i]=='V'||a[i]=='F'){
    37                 if(a[i]=='V'){
    38                     data.push(true);
    39                 }
    40                 else{
    41                     data.push(false);
    42                 }
    43             }
    44             else{
    45                 if(a[i]=='!'){
    46                     symbol.push(a[i]);
    47                     continue;
    48                 }
    49                 int symbol_index;
    50                 symbol_index=change(a[i]);
    51                 while(b[symbol_index][change(symbol.top())]==0){
    52                     bool b=data.top();
    53                     data.pop();
    54                     bool a=data.top();
    55                     data.pop();
    56                     switch(symbol.top()){
    57                         case '&': data.push(a&&b);break;
    58                         case '|':data.push(a||b);break;
    59                         case '!':data.push(a);data.push(!b);break;
    60                     }
    61                     symbol.pop();
    62                 }
    63                 if(a[i]==')'){
    64                     if(symbol.top()=='('){
    65                         symbol.pop();
    66                     }
    67                     continue;
    68                 }
    69                 symbol.push(a[i]);
    70             }
    71         }
    72         while(symbol.top()!='@'){
    73             if(symbol.top()=='('||symbol.top()==')'){
    74                 symbol.pop();
    75                 continue;
    76             }
    77             bool b=data.top();
    78             data.pop();
    79             bool a=data.top();
    80             data.pop();
    81             switch(symbol.top()){
    82                 case '&':data.push(a&&b);break;
    83                 case '|':data.push(a||b);break;
    84                 case '!':data.push(a);data.push(!b);break;
    85             }
    86             symbol.pop();
    87         }
    88         if(!data.top()){
    89             cout << "F
    ";
    90         }
    91         else{
    92             cout << "V
    ";
    93         }
    94     }
    95     data.pop();
    96     return 0;
    97 }
  • 相关阅读:
    JS---Function
    WebForm(Application,ViewState,Repeater的Command操作)
    WebForm(分页)
    WebForm多页面传值跳转
    WebForm(response内置函数)#转
    WebForm(内置函数)
    webform(复合控件)
    Webform简单控件
    webform之Repeater控件
    IIS编辑器错误信息:CS0016解决方案
  • 原文地址:https://www.cnblogs.com/eason66-blog/p/P6263.html
Copyright © 2011-2022 走看看