蓝桥杯:前缀表达式

题目:

编写一个程序,以字符串方式输入一个前缀表达式,然后计算它的值。输入格式为:“运算符 对象1 对象2”,其中,运算符为“+”(加法)、“-”(减法)、“*”(乘法)或“/”(除法),运算对象为不超过10的整数,它们之间用一个空格隔开。要求:对于加、减、乘、除这四种运算,分别设计相应的函数来实现。
  输入格式:输入只有一行,即一个前缀表达式字符串。
  输出格式:输出相应的计算结果(如果是除法,直接采用c语言的“/”运算符,结果为整数)。
  输入输出样例
样例输入
+ 5 2
样例输出
7


代码:

#include<iostream>

using namespace std;

int addition(int a,int b)
{
    return a+b;
}
int subtraction(int a,int b)
{
    return a-b;
}
int multiplication(int a,int b)
{
    return a*b;
}
int division(int a,int b)
{
    return a/b;
}

int main()
{
    char o;
    int a,b;
    cin>>o;
    cin>>a>>b;
    if(a>10 && b>10) return 0;
    switch(o)
    {
        case '+':cout<<addition(a,b)<<endl;break;
        case '-':cout<<subtraction(a,b)<<endl;break;
        case '*':cout<<multiplication(a,b)<<endl;break;
        case '/':cout<<division(a,b)<<endl;break;
        default:break;
    }

    return 0;
}


### 蓝桥杯前缀和算法题解法 #### 一维前缀和的应用 在一维场景中,前缀和的核心思想是通过预先计算数组的部分和来加速后续的区间查询操作。对于给定的一个长度为N的一维数组`a[]`,可以通过构建一个新的数组`f[]`来进行预处理[^5]。具体而言,公式定义如下: ```cpp for (int i = 1; i <= N; ++i) { f[i] = f[i - 1] + a[i]; } ``` 这样做的好处在于,当我们需要频繁查询任意区间 `[l, r]` 的和时,只需执行一次简单的减法运算即可得到结果 `sum(l, r) = f[r] - f[l-1]`。 #### 示例代码 以下是基于上述原理的一段 C++ 实现代码: ```cpp #include <iostream> using namespace std; const int MAX_N = 1e5 + 7; long long a[MAX_N], f[MAX_N]; void preprocess(int n) { for (int i = 1; i <= n; ++i) { f[i] = f[i - 1] + a[i]; // 构建前缀和数组 } } // 查询 [l, r] 区间内的和 long long query_sum(int l, int r) { return f[r] - f[l - 1]; } int main() { int n, q; cin >> n; for (int i = 1; i <= n; ++i) { cin >> a[i]; } preprocess(n); cin >> q; while (q--) { int l, r; cin >> l >> r; cout << query_sum(l, r) << endl; } return 0; } ``` 这段程序展示了如何利用前缀和优化多次区间求和的操作效率。 #### 二维前缀和扩展 除了适用于一维数据结构外,前缀和还可以推广至二维情况,用于高效地计算矩形区域中的元素总和[^2]。假设有一个大小为 M×N 的矩阵 A,则其对应的前缀和矩阵 S 可按以下方式初始化: ```cpp S[x][y] = A[x][y] + S[x-1][y] + S[x][y-1] - S[x-1][y-1]; ``` 当询问左上角位于 `(x1,y1)` 和右下角处于 `(x2,y2)` 所包围范围之内的数值累积量时,可依据下面表达式迅速获取答案: ```cpp result = S[x2][y2] - S[x1-1][y2] - S[x2][y1-1] + S[x1-1][y1-1]; ``` 这种方法同样能够显著降低时间开销,使得原本 O(K^2) 复杂度的任务降至常数级别完成。 #### 综合应用实例分析 考虑到实际竞赛环境中可能遇到更复杂的混合型问题,例如结合差分、二分查找甚至高级的数据结构如线段树等工具共同解决问题的情况。此时,合理运用前缀和作为辅助手段往往能起到事半功倍的效果[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值