一个关于交换的比喻

by AquarHEAD

晚上喝了杯咖啡,然后充分地体验了“杯具”的含义——头痛欲裂,整的我不得不在床上翻来覆去了三四个小时,现在好些了。

刚躺下的时候想到了一个关于交换两个变量的比喻,但是关了电脑所以只好用纸笔记录下来。

想起了高一下学期的时候数学老师讲算法,让我给讲交换两个变量时候为啥得用一个临时变量,Pascal代码可表示如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Program Exchange;
Var
 a,b,c : Longint;
 
Begin
 Readln(a,b);
// Exchange begins here
 c:=a;
 a:=b;
 b:=c;
// Exchange Complete
 Writeln(a,' ',b);
 Readln;
End.

我想了这么个比喻法:假设现在有A、B两个杯,A里面是啤酒,B里面是白酒,要求让A里面是白酒,B里面是啤酒,怎么办?

显然,得再拿个C杯,把A的啤酒倒进C里面,再把B的白酒倒进A里面,最后把C的啤酒倒进B里面。

当时我讲的时候主要是强调了算法程序中的等号不是数学意义上的=,而是赋值符号(即Pascal中的:=),而赋值符号的意义是把右边的值给左边,不用一个c变量进行备份的话会把原来的值覆盖掉。

现在想想当时讲的太麻烦了。