算法题每日一练---第84天:速算机器人

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第19天,点击查看活动详情

一、问题描述

小扣在秋日市集发现了一款速算机器人。店家对机器人说出两个数字(记作 x 和 y),请小扣说出计算指令:

  • "A" 运算:使 x = 2 * x + y
  • "B" 运算:使 y = 2 * y + x

在本次游戏中,店家说出的数字为 x = 1 和 y = 0,小扣说出的计算指令记作仅由大写字母 AB 组成的字符串 s,字符串中字符的顺序表示计算顺序,请返回最终 x 与 y 的和为多少。

题目链接:速算机器人

二、题目要求

样例

输入:s = "AB"
输出:4
解释:经过一次 A 运算后,x = 2, y = 0。再经过一次 B 运算,x = 2, y = 2。
最终 x 与 y 之和为 4。
复制代码

考察

1.模拟、数学
2.建议用时10~15min
复制代码

三、问题分析

这是一道比较简单的模拟问题,主要还是考察数学思想、条件判断。

7.png

上面的题目中规定了字符串由指令A B组成,其中A指令对x进行操作x = 2 * x + y,B指令对y进行操作y = 2 * y + x

那我们只需要遍历判断字符串,对不同的指令在if条件判断语句进行分流,用计算式进行计算具体的结果值。

最后,返回x+y的结果就行了。

四、编码实现

class Solution {
public:
    int calculate(string s) {
        int i,x=1,y=0;//初始化数据
        for(i=0;i<s.size();i++)//遍历指令
        {
            if(s[i]=='A')//指令A
                x=2*x+y;
            if(s[i]=='B')//指令B
                y=2*y+x;
        }
        return x+y;//输出结果
    }
};
复制代码

五、测试结果

2.png

1.png

猜你喜欢

转载自juejin.im/post/7088114975150964749