中缀表达式求助
本帖最后由 柿子饼同学 于 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
好奇问您一句,给出的测试样例您通过了吗?
我复制您的代码,用测试样例作为输入似乎没有得到预期的输出。 ...
嗯 , 我这里是可以输出的 , 但是就是答案不对 , 第一个样例输出 15
但是第二个样例对了 柿子饼同学 发表于 2022-8-23 07:09
嗯 , 我这里是可以输出的 , 但是就是答案不对 , 第一个样例输出 15
但是第二个样例对了
好吧,我的意思是,恕我多言,您有自己编写的代码、调试环境和可复现问题的输入,这已经是非常简单的场景了,何况代码的流程很短,即使是完全单步调试走一遍也能够接受,而且我相信单步走一遍是一定能发现您这段代码里的问题的(即使不用调试器手算一遍也是可行的)。
之前看您在备考信息学竞赛,试问在考场上您会不会遇到这种情况,您又计划向谁求助? dolly_yos2 发表于 2022-8-23 11:02
好吧,我的意思是,恕我多言,您有自己编写的代码、调试环境和可复现问题的输入,这已经是非常简单的场景 ...
好吧, 我再看看 柿子饼同学 发表于 2022-8-23 11:42
好吧, 我再看看
1
10
((R1-R1)|R1) 我感觉可以把这个先搞成逆波兰表达式再求值
但是我都忘了,代码不会写{:10_266:} tommyyu 发表于 2022-8-24 08:35
我感觉可以把这个先搞成逆波兰表达式再求值
但是我都忘了,代码不会写
这样太麻烦了, 有个朋友用递归直接做的qwq
页:
[1]