面试题——a、b交换与比较

原创 2015年11月19日 00:08:06

面试题1:

有两个变量a和b,不用“if”,"?"、"switch"或其他判断语句,找出两个数中间比较大的

方案一:

int  max = ((a+b)+abs(a-b))/2

注:abs()--求绝对值

方案二:

int c = a-b;

char * strs[2] = {"a large","b large"};

c = unsigned(c)>>(sizeof(int)*8-1);

面试题2:给三个整数a、b、c, 函数实现取三个数的中间数,不可以用sort ,整数操作尽可能少

代码如下:

inline  int  max(int a, int b) { return a>=b?a:b;}

inline int  min(int a, int b) { return a<=b?a:b;}

inline int medium (int a,int b,int c)

{

int t1 =max(a,b);

int t2 = max(b,c);

int t3 = max(a, c);

return min (t1,min(t2,t3));

}

面试题3:如何将a、b的值进行交换,并且不使用任何中间变量?

解析:简而言之,用异或语句比较容易,不用担心越界问题

如果采用:

a=a+b;

b=a-b;

a=a-b;

这样做的缺点就是如果a、b都是比较大的两个数,a=a+b就会越界

而采用:

a=a^b;

b=a^b;

a=a^b;

无需担心越界问题,这样就比较好

这样做的原理是按位异或运算。按位异或运算“^”是双目运算符。其功能是参与运算的两个数个对应的二进制位相异或,当对应的二进制位相异时取1;

参与运算数仍以补码形式出现,

版权声明:本文为博主原创文章,未经博主允许不得转载。

c语言:将数组A中的内容和数组B中的内容进行交换。(数组一样大)

将数组A中的内容和数组B中的内容进行交换。(数组一样大)方法一:#includevoid swap(int arr1[], int arr2[], int leng){int i = 0;for (i...
  • yanxiaolx
  • yanxiaolx
  • 2016年05月29日 13:36
  • 627

a, b 交换数据的三种方式

package com.jeryFu.test; /** * 数据交换, 三种方式 * a变成b, b变成a * @author jeryFu */ public class DataExch...
  • fanshujuntuan
  • fanshujuntuan
  • 2014年11月18日 18:46
  • 558

交换数值的几种方法比较(a,b互换)

一.   temp=a;   a=b;   b=temp;   缺点:需要用temp中间量,空间性不好       二.加减法,另有乘除法,相似,就不另举了(+改为*,-改为/...
  • terrychinaz
  • terrychinaz
  • 2012年11月25日 10:44
  • 3173

a,b交换与比较

1.有两个变量a、b,不用判断语句,找出其中较大的数 int max = ((a + b) + abs(a - b)) / 2 2.将a,b交换,不用任何中间变量 方法一:加减法(可能会...
  • ll_0802
  • ll_0802
  • 2016年02月20日 14:53
  • 168

swap(a,b)值交换的4种方法

这篇文章所要表述的内容的确很简单,写之前,我纠结了很久:写与不写。平常swap(a,b)值交换,我们基本都是使用第一种方法,对于数学较好的人,可能会想到第二种方法,想到时,一定感觉很好,。对于汇编或对...
  • huangminqiang201209
  • huangminqiang201209
  • 2013年02月25日 10:04
  • 4441

"异或"实现a和b两变量交换

今天在看C语言的位运算时,看到了如下交换a,b两值的方法:                     a = a^b;                     b = a^b;          ...
  • dx01259
  • dx01259
  • 2015年07月22日 21:34
  • 609

比较a^b与b^a的大小

给你两个int型的正整数,比较a的b次方与b的a次方的大小。 思路:这道题我们要用到高中所学的知识,当a>0&&b>0分别对a^b和b^a取对数=>blna alnb=>lna/a lnb/b=>l...
  • qq_37820491
  • qq_37820491
  • 2017年12月20日 17:29
  • 91

C 语言swap(a,b)值交换的几种实现方法

从学习开始,就开始学习C语言。书本上介绍的swap程序很基础,我在网络上查看了关于swap程序的设计。 有很多,列举了以下四种方法。 //以下是原程序,VC++6.0编译通过。 /*******...
  • Scalpelct
  • Scalpelct
  • 2016年08月17日 00:55
  • 1401

如何将a、b的值进行交换,并且不使用任何中间变量?

可以采用a、b之间的加减运算来实现: a = a + b; b = a- b; a = a - b; 这样做的缺点是如果a、b是比较大的两个数,进行相加求和时就会超界。 用异或...
  • yyt_EnjoyVC
  • yyt_EnjoyVC
  • 2015年07月22日 12:34
  • 3712

java 如何不增加变量 交换 a和b 的值

在网上看到一道题,就是有 a 和 b 的值 如何不通过增加变量 交换a和b 的值。在网上找了找有两种方式 ,一种是根据与或关系交换,另外一种就是根据差值来计算。 这里主要是讲一下通过 比较差值交换。 ...
  • luinsist
  • luinsist
  • 2013年07月09日 21:03
  • 2801
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:面试题——a、b交换与比较
举报原因:
原因补充:

(最多只允许输入30个字)