首页 > 试题广场 >

无判断max

[编程题]无判断max
  • 热度指数:8601 时间限制:C/C++ 3秒,其他语言6秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

给定int a和intb,在不使用if-else等比较和判断运算符的情况下返回较大的那个数。若两数相同则返回任意一个。

测试样例:
1,2
返回:2
推荐
public int getMax(int a ,int b){
    b = a-b;//此时b>>31为1则b小于0即a<b,若b>>31为0 则a>b
    a- = b&(b>>31); //若a<b a=a-(a-b),若a>b a=a-0  
    return a;
}
类似交换两个数大小
public int[2] exchangeNum(int[2] num){
    num[1] = num[0]-num[1];
    num[0] = num[0]-num[1];
    num[1] = num[0]+num[1];
    return num;
}

编辑于 2015-08-16 16:25:18 回复(21)
新解:
1. c = (a-b)>>31
(1)当a>=b时,(a-b)符号位为0,(a-b)右移31位,高位补0,右移后的结果为0;
(2)当a<b时,(a-b)符号位为1,(a-b)右移31位,高位补1,右移后的结果不是 我们想当然的1,而是-1。 
2.a+c*(a-b)
(1)当c=0时,说明a>=b,a+c*(a-b)=a,返回a;
(2)当c=-1时,说明a<b,a+c*(a-b)=a-(a-b)=b,返回b。
    public int getMax(int a, int b) {
	    int c = (a-b)>>31;
        return a+c*(a-b);
    }

编辑于 2015-09-04 17:59:38 回复(7)
# -*- coding:utf-8 -*-
class Max:
    def getMax(self, a, b):
        # (a - b) >> 31 为 0, 说明 a - b 最高位为0,即a >=b
        # (a - b) >> 31 为 -1, 说明 a - b 最高位为1, 即 a < b
        return {0:a,-1:b}[(a-b)>>31]

发表于 2016-08-09 11:46:22 回复(0)

再次****了。。。

    public int getMax(int a, int b) {
        // write code here
        return a - b > 0 ? a : b;
    }
发表于 2017-07-30 22:31:49 回复(3)
使用Arrays类中的sort方法排序,第一个最小,最后一个最大。
import java.util.*;

public class Max {
	public void getMax(int a, int b) {
		// write code here
		int[] c = { a, b };
		Arrays.sort(c);
		System.out.println(c[1]);
	}

	public static void main(String[] args) {
		Max testMax = new Max();
		testMax.getMax(1, 2);
	}
}

发表于 2015-07-29 12:24:23 回复(2)
return Math.max(a,b);

发表于 2016-05-03 11:47:32 回复(0)

# -*- coding:utf-8 -*-

class Max:
    def getMax(self, a, b):
        return max(a, b)

发表于 2018-12-26 19:00:01 回复(0)
import java.util.*;

public class Max {
    public int getMax(int a, int b) {
        return a>=b?a:b;
    }
}


发表于 2018-03-04 13:13:13 回复(0)
import java.util.*;

public class Max {
    public int getMax(int a, int b) {
        // write code here
          return (a-b)/2>=0?a:b;
    }
}

发表于 2017-08-10 15:39:32 回复(0)
int getMax(int a, int b) {
        bitset<sizeof(int)*8> sub_ab(a - b); return sub_ab[sizeof(int)*8-1] & 1 ? b : a; }

发表于 2017-04-26 14:32:20 回复(0)
class Max:
    def getMax(self, a, b):
        k = self.sign(a) ^ 1
        q = self.sign(b) ^ 1
        t = self.sign(a - b) ^ 1
        u = k ^ q #同号相减的溢出是正常的
        x = u * k + (u ^ 1) * t
        y = u * q + (u ^ 1) * (t ^ 1)
        return x * a + y * b

    def sign(self, n):  # 取符号位
        return n >> 31 & 1

发表于 2017-03-06 14:59:16 回复(0)
class Max {
public:
    int getMax(int a, int b) {
        // write code here
 int max;
        bool ((a-b)>0)&&(max=a);
        bool ((a-b)<=0)&&(max=b);
 return max;
    }
};
发表于 2016-06-12 16:28:16 回复(0)
class Max {
public:
    int getMax(int a, int b) {
        int c = a - b;
        int r = ((c&0x80000000)>>31);
        int ret = a;
        r&&(ret=b);
        return ret;

    }
};

发表于 2015-08-18 20:32:45 回复(0)
/*思路:a和b的差的绝对值是abs(a - b),然后差的绝对值加上a和b的和即为最大值的两倍。
同理求两数较小的一个,a + b - abs(a - b)即可。
*/
//代码:
class Max {
public:
    int getMax(int a, int b) {
        return((a + b + abs(a - b)) / 2);
        // write code here
    }
};

发表于 2015-08-14 20:06:12 回复(10)
WAK头像 WAK
利用小的数除大的数=0的性质去掉小的数,最后只保留较大的数
class Max {
public:
    int getMax(int a, int b) {
        return(a/b*a+b/a*b)/(a/b+b/a);
    }
};
发表于 2018-07-24 11:32:36 回复(1)
使用三元运算符?:即可:return a>b?a:b;
发表于 2016-07-09 19:52:47 回复(3)
return Math.max(a,b);一行搞定
发表于 2017-12-25 16:12:31 回复(0)
/*
思路:位运算 & >>

正数的符号位是0
负数的符号位是1

先用a-b得到c,如果c右移31位后和1相与得到1,说明C右移31位后最低位是1,也就是说右移之前的c是负数。那么a小于b。

否则a大于b。

*/
class Max {
public:
    int getMax(int a, int b) {
        //获取a-b的值
        int c = a-b;
        //差右移31位得到符号位
        c >>= 31;
        //符号位和1相与
        c &= 1;
        //如果此时c是1,说明是负数,下列式子:a = a-a+b = b(负数说a小于b)
        //如果此时c是0,说明是正数,下列式子:a = a-0 = a(正数说明a大于b)
        a = a - (a-b)*c;
        return a;
    }
};

发表于 2023-04-10 12:19:53 回复(0)
int getMax(int a, int b) {

        return  a -(b&(a-b)>>31);
    }
发表于 2022-12-30 13:29:41 回复(0)
return ((a+b)+abs(a-b))/2;
发表于 2021-10-10 22:42:35 回复(0)
import java.util.*;

public class Max {
    public int getMax(int a, int b) {
        // write code here
        return a>=b?a:b;
    }
}
就这?
发表于 2021-05-24 09:21:04 回复(0)

问题信息

难度:
80条回答 18404浏览

热门推荐

通过挑战的用户

查看代码