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 }
  • 相关阅读:
    tensorflow 2.0 学习 (十) 拟合与过拟合问题
    tensorflow 2.0 学习 (九) tensorboard可视化功能认识
    tensorflow 2.0 学习 (八) keras模块的认识
    tensorflow 2.0 学习 (七) 反向传播代码逐步实现
    tensorflow 2.0 学习 (六) Himmelblua函数求极值
    tensorflow 2.0 学习 (五)MPG全连接网络训练与测试
    arp协议简单介绍
    Pthread spinlock自旋锁
    线程和进程状态
    内核态(内核空间)和用户态(用户空间)的区别和联系·
  • 原文地址:https://www.cnblogs.com/eason66-blog/p/P6263.html
Copyright © 2011-2022 走看看