面试题→交换两个变量的值

 

面试题:交换两个变量
也许当你听到这道题的时候会暗暗的发笑,这么简单的算法题竟然拿出来作为面试题考,是不是也在怀疑这家公司的本身的能力与规模了呢。
交换两个变量:例如num1=5,num2=6→num1=6,num=5
怎么样是不是觉得灰常简单,你是不是用下面的方法做的:
int num1=5;
int num2=6;
int temp=num1;
num1=num2;
num2=temp;
Console.WriteLine("num1={0},num2={1}",num1,num2);
       很对,大家从开始学编程就已经学到了中间变量的作用,好比是两个瓶子,一瓶是可乐,一瓶是雪碧,要是想把两个瓶子里面的饮料交换一下,,那么我们首先想到的就是借助于中间变量(再找来一个空的瓶子)先把其中一瓶的饮料(雪碧或可乐)倒进空瓶,再把另一瓶的饮料(可乐或雪碧)倒进刚刚倒出饮料的瓶子,最后再把用来作为中间变量的瓶子里的饮料给现在空着的瓶子,这样就达到了交换两瓶饮料的的目的。
这种做法再符合逻辑不过了。


接着我们来看下面的面试题:

不允许任何中间变量来交换两个变量的值:例如num1=5,num2=6

怎么样,有没有需要思考几分钟的意思?

在不借助任何中间变量的情况下交换变量的值,一贯继承了好久的习惯一下子给禁用了,猛一看有没有点无从下手的感觉,下面我们来看一下它的解决办法:
int num1=5;
int num2=6;
num1+=num2;
num2=num1-num2;
num1=num1-num2;
Console.WriteLine("num1={0},num2={1}",num1,num2);


看完解决方案会不会觉得恍然大悟的感觉,也许你会觉得第二种方法简直不合逻辑,简直不门不派,但是真让你遇到这样的面试题,你能怎么办,再编程中遵循的最重要的一个原则就是用最简单的方法解决最复杂的问题,所以,虽然后一种方法没有普及型,很欠规范,但是具体情况还是要具体分析的好。不要把面试题想象的有多么的难,其实都是我们经常用到的,经常见到的算法,就是换了一种形式,换了一种解决方法而已,所以在平常的学习中我们一定要把知识学活,把思路打开。这样我们才会真的驾驭所学来解决新的东西。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值