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

时间:2023-03-09 15:28:32
曾经的华为C面试题,一点就通
 学习编程可以锻炼你的思维,帮助你更好地思考,创建一种我认为在各领域都非常有用的思维方式。
比尔盖茨
曾经的华为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