zoukankan      html  css  js  c++  java
  • 蓝桥杯 二元函数 模拟

    问题描述
      令二元函数f(x,y)=ax+by,a和b为整数,求一个表达式S的值。
      只有满足以下要求的表达式才是合法的:
      1.任意整数x是一个合法的表达式;
      2.如果A和B都是合法的表达式,则f(A,B)也是一个合法的表达式。
    输入格式
      第一行两个数a和b;
      第二行一个字符串S表示要求的表达式。
    输出格式
      一行一个数表示表达式S的值。
    样例输入
    1 2
    f(1,f(1,-1))
    样例输出
    -1
    数据规模和约定
      S的长度不超过50,运算过程中所有变量不会超出int的范围。
    想到了用栈,没做出来。
    没做出来的原因分析:
      1:如果有f(12, 123)这样的12,123多位数字如何操作。正解应是传递引用的形参表示索引
      2:什么时候弹出栈顶元素没有想到,其实可以不用考虑字符f和左括号的。
    参考自https://blog.csdn.net/qq_42914633/article/details/87558740
     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 int a, b; //表达式里的系数
     4 string sf; //输入的字符串
     5 int f(int x, int y) { //返回一个f表达式的值
     6     return a * x + b * y;
     7 }
     8 int getnum(int &i, bool minus) { //参数i为引用参数,minus用于判断是否是负数
     9     int num = 0;
    10     while (sf[i] >= '0' && sf[i] <= '9') { //此处为while,即如果下一个字符也为数字的话,把下一位数字也加上
    11         num = num * 10 + sf[i] - '0';
    12         i++;
    13     }
    14     if (minus) {
    15         num = -num;
    16     }
    17     return num;
    18 }
    19 int main() {
    20     stack<int> s;
    21     cin >> a >> b >> sf;
    22     int len = sf.length();
    23     s.push(0); //首先压入0,若输入空字符串,应弹出0
    24     for (int i = 0; i < len; i++) {
    25         if (sf[i] == '-') { //如果这一位是负号,下一位一定是数字,i移动到下一位
    26             i++;
    27             s.push(getnum(i, true));
    28         } else if (sf[i] >= '0' && sf[i] <= '9') { //如果这一位是数字的话压入数字(必为正数,负数在上一个if那里判断了)
    29             s.push(getnum(i, false));
    30         }
    31         if (sf[i] == ')') { //如果这一位是右括号,意味着有一个f表达式可以计算了
    32             int y = s.top();
    33             s.pop();
    34             int x = s.top();
    35             s.pop();
    36             s.push(f(x, y));
    37         }
    38     }
    39     cout << s.top() << endl;
    40     return 0;
    41 }
  • 相关阅读:
    经验:Library Cache Lock之异常分析-云和恩墨技术通讯精选
    Schnorr 签名算法与聚合签名
    5G 第五代移动通信网络
    《机器学习》周志华西瓜书习题参考答案:第9章
    启动tomcat,在黑色窗口中看到乱码
    Linux系统目录结构以及简单说明
    Linux系统目录结构以及简单说明
    锤子科技官网:问题整理及注意事项
    锤子科技官网:问题整理及注意事项
    锤子科技官网:问题整理及注意事项
  • 原文地址:https://www.cnblogs.com/fx1998/p/12622941.html
Copyright © 2011-2022 走看看