鱼C论坛

 找回密码
 立即注册
查看: 2066|回复: 7

中缀表达式求助

[复制链接]
发表于 2022-8-22 21:18:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

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


屏幕截图 2022-08-22 211600.png 屏幕截图 2022-08-22 211619.png
输入输出 :
1 
10
(R1-R1|R1)
6.667
5 
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[205]; // 存放标号为 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[i];
    cin >> s;

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

    while(i < len){
        if(s[i] == 'R'){
            i++;
            int nm = 0;
            while(isdigit(s[i])){
                nm = nm * 10 + s[i] - '0';
                i++;
            } 
            num.push(dict[nm]); // 这里把下标求出, 推入他的值
        }
        else{          
            if(s[i] == '(') op.push(s[i]);
            else if(s[i] == ')'){
                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]);
            i++;
        }
    }

    cout << num.top() << endl;
    
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-8-22 21:44:57 | 显示全部楼层
好奇问您一句,给出的测试样例您通过了吗?
我复制您的代码,用测试样例作为输入似乎没有得到预期的输出。请问您考虑了使用测试样例进行调试了吗,还是调试也没有发现问题?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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


嗯 , 我这里是可以输出的 , 但是就是答案不对 , 第一个样例输出 15
但是第二个样例对了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

使用道具 举报

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

好吧, 我再看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-23 12:04:23 | 显示全部楼层

1
10
((R1-R1)|R1)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-24 08:35:30 | 显示全部楼层
我感觉可以把这个先搞成逆波兰表达式再求值
但是我都忘了,代码不会写
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

这样太麻烦了, 有个朋友用递归直接做的qwq
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-16 23:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表