一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第19天,点击查看活动详情。
一、问题描述
小扣在秋日市集发现了一款速算机器人。店家对机器人说出两个数字(记作 x
和 y
),请小扣说出计算指令:
"A"
运算:使x = 2 * x + y
;"B"
运算:使y = 2 * y + x
。
在本次游戏中,店家说出的数字为 x = 1
和 y = 0
,小扣说出的计算指令记作仅由大写字母 A
、B
组成的字符串 s
,字符串中字符的顺序表示计算顺序,请返回最终 x
与 y
的和为多少。
题目链接:速算机器人
二、题目要求
样例
输入:s = "AB"
输出:4
解释:经过一次 A 运算后,x = 2, y = 0。再经过一次 B 运算,x = 2, y = 2。
最终 x 与 y 之和为 4。
复制代码
考察
1.模拟、数学
2.建议用时10~15min
复制代码
三、问题分析
这是一道比较简单的模拟问题,主要还是考察数学思想、条件判断。
上面的题目中规定了字符串由指令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;//输出结果
}
};
复制代码