柿子饼同学 发表于 2022-8-22 21:18:49

中缀表达式求助

本帖最后由 柿子饼同学 于 2022-8-23 07:48 编辑

求助 , 不管怎么搞答案还是不对, 附上题目和我写的代码 ( 求解 )
如果您写出正确的代码 , 请带详解


输入输出 : 1
10
(R1-R1|R1)6.6675
1 2 3 4 5
(R1-(R2|R3)-R4-R5)11.200
#include <bits/stdc++.h>
using namespace std;

string s; // 输入没有空格
stack<double> num; // 数字栈
stack<char> op; // 运算符栈
double dict; // 存放标号为 i 的值
int n;

int main(){
    ios::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
   
    cin >> n;
    for(int i = 1; i <= n; i++) cin >> dict;
    cin >> s;

    int i = 0, len = s.size();

    while(i < len){
      if(s == 'R'){
            i++;
            int nm = 0;
            while(isdigit(s)){
                nm = nm * 10 + s - '0';
                i++;
            }
            num.push(dict); // 这里把下标求出, 推入他的值
      }
      else{         
            if(s == '(') op.push(s);
            else if(s == ')'){
                auto c = op.top(); op.pop();
                while(c != '('){
                  auto a = num.top(); num.pop();
                  auto b = num.top(); num.pop();
                  if(c == '|') num.push(a*b/(a+b));
                  if(c == '-') num.push(a+b);
                  c = op.top(); op.pop();
                }
            }
            else op.push(s);
            i++;
      }
    }

    cout << num.top() << endl;
   
    return 0;
}

dolly_yos2 发表于 2022-8-22 21:44:57

好奇问您一句,给出的测试样例您通过了吗?
我复制您的代码,用测试样例作为输入似乎没有得到预期的输出。请问您考虑了使用测试样例进行调试了吗,还是调试也没有发现问题?

柿子饼同学 发表于 2022-8-23 07:09:50

dolly_yos2 发表于 2022-8-22 21:44
好奇问您一句,给出的测试样例您通过了吗?
我复制您的代码,用测试样例作为输入似乎没有得到预期的输出。 ...

嗯 , 我这里是可以输出的 , 但是就是答案不对 , 第一个样例输出 15
但是第二个样例对了

dolly_yos2 发表于 2022-8-23 11:02:37

柿子饼同学 发表于 2022-8-23 07:09
嗯 , 我这里是可以输出的 , 但是就是答案不对 , 第一个样例输出 15
但是第二个样例对了

好吧,我的意思是,恕我多言,您有自己编写的代码、调试环境和可复现问题的输入,这已经是非常简单的场景了,何况代码的流程很短,即使是完全单步调试走一遍也能够接受,而且我相信单步走一遍是一定能发现您这段代码里的问题的(即使不用调试器手算一遍也是可行的)。
之前看您在备考信息学竞赛,试问在考场上您会不会遇到这种情况,您又计划向谁求助?

柿子饼同学 发表于 2022-8-23 11:42:15

dolly_yos2 发表于 2022-8-23 11:02
好吧,我的意思是,恕我多言,您有自己编写的代码、调试环境和可复现问题的输入,这已经是非常简单的场景 ...

好吧, 我再看看

jhq999 发表于 2022-8-23 12:04:23

柿子饼同学 发表于 2022-8-23 11:42
好吧, 我再看看

1
10
((R1-R1)|R1)

tommyyu 发表于 2022-8-24 08:35:30

我感觉可以把这个先搞成逆波兰表达式再求值
但是我都忘了,代码不会写{:10_266:}

柿子饼同学 发表于 2022-8-24 08:45:24

tommyyu 发表于 2022-8-24 08:35
我感觉可以把这个先搞成逆波兰表达式再求值
但是我都忘了,代码不会写

这样太麻烦了, 有个朋友用递归直接做的qwq
页: [1]
查看完整版本: 中缀表达式求助