题目
分析
题目已经明确规定,只有三个变量,可能出现的数字(作为赋值)也只有一位。
本题要求读者先分析清两种可能的赋值语句:
- 形如
a:=3;的赋值
假定这个字符串在原始字符串s的起始位置是i,那么这种赋值,其顺序是:
- 找到变量名
a:s[i]; - 跳过
:=,到3的位置:i+=3; - 获得
3,并转为数值3:'3'-'0'。
- 形如
b:=a的赋值
假定这个字符串在原始字符串s的起始位置是i,那么这种赋值,其顺序是:
- 找到变量名
ba:s[i]; - 跳过
:=,到a的位置:i+=3; - 获得
a,获得a已经存储的值(比如说3),直接赋值。
实际操作中,我们可以设置一个数组,分别用来存放a/b/c当前的值(初始为0)。
for (int i = 0; i < input.size(); i++)
{
// 找到变量名
if (input[i] >= 'a' && input[i] <= 'c')
{
int var_index = input[i] - 'a'; // a->0, b->1, c->2
i += 3; // 跳过 :=
// 解析值
char value = input[i];
int result;
if (value >= '0' && value <= '9')
{
result = value - '0';
}
else
{
result = vars[value - 'a']; // 从数组读取变量值
}
// 赋值
vars[var_index] = result;
}
}
示例
输入: a:=1;b:=a;c:=2;
a:=1;→ a = 1b:=a;→ b = a 的值 = 1c:=2;→ c = 2
输出: 1 1 2
答案

思考
本题模拟了计算机程序中变量赋值的基本过程。在实际编程语言中,编译器或解释器需要解析类似的语句,将变量名映射到内存地址,并执行赋值操作。这道题是理解程序执行机制的一个简单入门。
