在面试C#程序开发过程或者java程序开发的过程中,很多人会遇到一个经典面试题:不使用第三方变量,交换变量a和b的值。此面试题主要考察应聘者的逻辑思维。一般情况下实现变量a和变量b的值互换会使用到第三方变量c。此文将简要介绍此面试题的思路以及解答方法。
(1)实现变量a和变量b的值互换,常规的方法是使用第三方变量c,具体实现代码如下(带详细解析):
int a=10;
int b=20;
int c=a;//使用第三方变量c先保存a的数值。
a=b;//将b的数值赋值给a变量。
b=c;//将c的数值赋值给b变量,因为c中存储的值为a变量的初始值,因此此步操作之后即将变量a和变量b的值互换成功。
(2)如果不使用第三方变量,只能有a和b两个变量相互操作,直接赋值肯定不行。
分析思路:首先直接使用其中一个变量对另一个变量赋值,发现两者变量值一样,被赋值的变量的值被覆盖,因此此方案Pass掉。
再进行深入一步分析,可以发现两者数字变量之间的差值绝对值是固定的,不管变量a和变量b是否互换,例如a=10,b=5,在互换之前,a-b的差值绝对值为5,两者互换后,a-b的差值为-5,其绝对值也为5。因此可从此思路入手解决。
具体实现代码如下:
int a=10;
int b=20;
a=a-b;//求出两者之间的差值为-10
b=b+a;//此步采取b变量加上两者差值,即可实现b变量换值成功,此步执行后结果为b=10,此时的b相当于开始的a变量
a=b-a;//用当前b变量减去两者差值即为起始的b变量值,此步操作结果a=20
结论:此题解法主要依据两个数值之间的差值不变来解决。