黑马程序员技术交流社区

标题: 一道不是算法的算法题 [打印本页]

作者: 邓飞    时间: 2013-9-6 10:42
标题: 一道不是算法的算法题
本帖最后由 杨增坤 于 2013-9-9 20:05 编辑

刚在网上看到的,觉得挺有意思,想了下没有想出来,求指点


int a = 8 ;
int b = 9;

求不用第三方变量交换a和b的值  ??

作者: javamov    时间: 2013-9-6 10:53
                a=a+b;
                b=a-b;
                a=a-b;
                System.out.println("a=="+a);
                System.out.println("b=="+b);
作者: Fire_Leg    时间: 2013-9-6 10:55
这个问题我碰到过 哈哈

a = a + b ;//有越界的风险
b = a - b ;
a = a - b ;

作者: 黄晓东    时间: 2013-9-6 10:55
  a=a+b;  b=a-b; a=a-b;
作者: 杨栋    时间: 2013-9-6 11:15
我有两种方法
1:用异或(好记):n=m^n; m=m^n; n=m^n;
2:(好理解):x=y+(y=x)-x;
作者: 焦允    时间: 2013-9-6 11:22
有两种方法:
第一种,上面已经说过类,在这里补充一下,若变量不是byte,short,char型的编译时会报错,因为这三种类型在进行算术运算时,会自动提升为int型,不能再赋值给上面三种类型的变量。
第二种,是通过位运算实现的  一个数异或另外一个数两次仍然是它本身,如下:
int a = 8;
int b = 9;
a = a ^ b;
b = a ^ b;
a = a ^ b;
作者: xiaoxu    时间: 2013-9-6 11:22
  1. class Test
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int a=8;
  6.                 int b=9;
  7.                 System.out.println("a="+a+",b="+b);
  8.                 //方法一
  9.                 a=a+b;
  10.                 b=a-b;
  11.                 a=a-b;
  12.                 System.out.println("a="+a+",b="+b);
  13.                 //方法二
  14.                 a=a^b;
  15.                 b=a^b;
  16.                 a=a^b;
  17.                 System.out.println("a="+a+",b="+b);
  18.                 //方法三
  19.                 a=b+(b=a)*0;
  20.                 System.out.println("a="+a+",b="+b);
  21.         }
  22. }
复制代码

作者: 杨增坤    时间: 2013-9-6 11:32
楼主你好,如果您的问题已经解决,


请把您的问题的未解决更改为已解决

谢谢合作!


作者: 赵凯    时间: 2013-9-6 11:32
这个一种是用异或,根据通一个数对同一个数异或两次结果不变,还有就是利用第三方元素,由于你这个题要求不润许使用第三个元素,所以用他们的和或差,你那个题定出了值,所以可以使用乘,不能用除,用除取得是整数所以不行,不定义值的话已不能用乘。方法一是:a=a^b,b=b^a,a=a^b;d
第二种:a=a+b,b=a-b,a=a-b; a=a-b;b=a+b;a=a+b

作者: 胡志翔    时间: 2013-9-6 12:34
第一种
int a = 8 ;
int b = 9;
a = a^b;
b = a^b;
a = a^b;
第二种
int a = 8 ;
int b = 9;
a = a+b; //如果a,b值过大,这里容易超出int范围。
b = a-b;
a = a-b;
作者: Bad_Boy    时间: 2013-9-6 13:25
用逻辑运算符异或(^):a = a^b;
作者: Bad_Boy    时间: 2013-9-6 13:27
逻辑运算符:a = a^b; b = a^b; a = a^b;




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2