作者共发了4篇帖子。 内容转换:不转换▼
 
点击 回复
356 3
【试题】逆波兰表达式
一派护法 十九级
1楼 发表于:2016-3-19 14:44
对于:-+3*5+261
其计算过程如下:
ev: {0, 0} -> {42, 9}
x: -+3*5+261
v1: {43, 7}
{
    ev: {0, 0} -> {43, 7}
    x: +3*5+261
    v1: {3, 1}
    {
        ev: {0, 0} -> {3, 1}
        x: 3*5+261
    }
    v2: {40, 5}
    {
        ev: {40, 5}
        x: *5+261
        v1: {5, 1}
        {
            ev: {0, 0} -> {5, 1}
            x: 5+261
        }
        v2: {8, 3}
        {
            ev: {0, 0} -> {8, 3}
            x: +261
            v1:
            {
                ev: {0, 0} -> {2, 1}
                x: 261
            }
            v2:
            {
                ev: {6, 1}
                x: 61
            }
            ev.result = 2 + 6 = 8
            ev.n = 1(加号本身) + 1 + 1 = 3
        }
        ev.result = 5 * 8 = 40
        ev.n = 1(乘号本身) + 1 + 3 = 5
    }
    ev.result = 3 + 40 = 43
    ev.n = 1 + 1 + 5 = 7
}
v2: {1, 1}
{
    ev: {0, 0} -> {1, 1}
    x: 1
}
ev.result = 42
ev.n = 1 + 7 + 1 = 9
return {42, 9}
一派护法 十九级
2楼 发表于:2016-3-19 14:47
对于表达式:
-+3*5+261 (也就是3 + 5 * (2 + 6) - 1)
其中的运算符为:-+*+
颠倒过来就是:+*+-
可见这个顺序和要求的实际表达式的运算符顺序是一模一样的。
一派护法 十九级
3楼 发表于:2016-3-19 15:14
#include <stdio.h>
#include <stdlib.h>

#define _____________________________ evaluate(x + v1.n + 1)

struct EV
{
    int result;  //计算结果
    int n;       //消耗掉的字符数
};

struct EV evaluate(char* x)
{
    struct EV ev = {0,0};
    struct EV v1;
    struct EV v2;

    if(*x==0) return ev;
    
    if(x[0]>='0' && x[0]<='9'){
        ev.result = x[0]-'0';
        ev.n = 1;
        return ev;
    }
    
    v1 = evaluate(x+1);
    v2 = _____________________________;  //填空位置
    
    if(x[0]=='+') ev.result = v1.result + v2.result;
    if(x[0]=='*') ev.result = v1.result * v2.result;
    if(x[0]=='-') ev.result = v1.result - v2.result;
    ev.n = 1+v1.n+v2.n;

    return ev;
}

int main(void)
{
    struct EV e = evaluate("-+3*5+261");
    printf("=%d, %d\n", e.result, e.n);
    system("pause");
    return 0;
}
一派护法 十九级
4楼 发表于:2016-3-19 16:01
对于递归函数的填空题,一般都采用蒙参数的方法

回复帖子

内容:
用户名: 您目前是匿名发表
验证码:
(快捷键:Ctrl+Enter)
 

本帖信息

点击数:356 回复数:3
评论数: ?
作者:巨大八爪鱼
最后回复:巨大八爪鱼
最后回复时间:2016-3-19 16:01
 
©2010-2024 Arslanbar Ver2.0
除非另有声明,本站采用知识共享署名-相同方式共享 3.0 Unported许可协议进行许可。