曾经的华为C面试题,一点就通

 学习编程可以锻炼你的思维,帮助你更好地思考,创建一种我认为在各领域都非常有用的思维方式。
 
比尔盖茨
 
 

 曾经的华为C面试题,一点就通


 【问题区】

 

    有两个变量x和y, x=10; y = 20;  请使用C语言代码实现两个变量的交换,要求至少使用3 种办法!

 


 【提示区】

 

        如果使用一个临时变量,来交换两个x和y的值,这是初学者都会的事情,如果不用临时变量,我们有没有办法实现呢?

 

大家还记得初中代数中的公式吗?

       x + y = z  ; 那么 x= z - y   或是 y = z - x ;

       x *  y = z  ; 那么 x = z / y  或是 y = z / x;

 

 上面这个公式说明: 如果我们知道两个数,以及两个数经过某种运算得到的结果,我们就可以通过三者中的任意两者得到第三者的结果!

 


【C代码实现区】

 

#include <stdio.h>

 

int main(void){

  int x = 10;

  int y = 20;

 

  //第一种方法  临时变量交换

  int z = 0;

  z = x;

  x = y;

  y = z;

 

  //第二种方法  加法

  x = x + y;     //执行后 x=30,y=20

  y = x - y;      //执行后 x=30,y=10

  x = x - y;      //执行后 x=20,y=10

 

  //第三种方法  乘法

  x = x * y;      //执行后 x=200,y=20

  y = x / y;       //执行后 x=200,y=10

  x = x / y;       //执行后 x=20,y=10

 

  //第四种方法 异或运算

  x = x ^ y;

  y = x ^ y;

  x = x ^ y;

 

  printf("x=%d, y=%d\n", x, y);

  return 0;

}

 


 【视频讲解】

 地址:https://v.qq.com/x/page/v08145k1qdr.html

 

posted @ 2018-12-28 16:53  Martin666  阅读(160)  评论(0编辑  收藏  举报