`
wujiazhao88
  • 浏览: 11416 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

不用判断语句求俩数中的大(或者小)数

阅读更多

前段日子找工作期间,经常上网找面试题目做做。

忘了是哪家公司的题目,其中有这么一道题

说,不能使用boolean,if else等判断语句,要求求出两个数中的大数,

【add at 2009-12-10 15:33:52】另,不能用Math类

 

一开始想来想去没有思路,后来想想,程序中需要判断的不就是if-else等逻辑判断以及异常嘛。。。

既然不能用判断,那就只能用异常了。

所以思路是,构造一段代码,让他遇到两个数时,可以构造出异常。什么代码可以这么神奇呢?

呵呵,很简单,用数组的越界可以解决问题!

 

public static int getMaxValueWidthoutBoolean(int a,int b){
 int[] array=new int[a];
try{
//只要b比a大,数组越界,肯定会导致异常,否则b比a小
//所以在catch模块中返回b,非异常返回a即可
array[b]=0;
}catch(Exception ex){
return b;
}
return a;
}

 呵呵,没去查过别人的解法是咋样的,我觉得应该还有其他更好的解法,各位想一想,知道的告知在下,谢谢了!

分享到:
评论
63 楼 bill.end 2009-12-10  
这题出的跟语言,速度没关系吧。
就是程序员的脑筋急转弯吧
62 楼 ray_linn 2009-12-10  
night_stalker 写道
Trustno1 写道
int max(int x,int y)
{
return x ^ ((x ^ y) & -(x < y));
}

这是 C …… 太适合做 bit 运算了。题目的难点之一便是用 java ……

嘛,各种奇怪的解答都是有的:
def max x, y
  [y, x, x][(x <=> y) + 1]
end


莫非我眼花 -(x < y)是boolean,用了它还需要什么位运算么。
61 楼 bill.end 2009-12-10  
int max(int a,int b){
        int[] max ={a,a,b};
        String ab = (a-b)+"";
        String ba = (b-a)+"";
        int index=ab.length()-ba.length()+1;
        return max[index];
}
60 楼 gundumw100 2009-12-10  
我只知道肯定要用位运算,这样是最快的,至于是否用到加减乘除,我个人认为不需要,要用上的话还不如if else 快!
59 楼 czwlucky 2009-12-10  
iaimstar 写道

int a = 36, b = 72;
int x = ((a - b) >> 31) & 1;
int y = ((b - a) >> 31) & 1;
System.out.println( x * b + y * a + ( 1 - x - y) * a);

刚看到坟中的一个解,不知道这个有什么问题? 我认为这个是正解啊
58 楼 wujiazhao88 2009-12-10  
topcode 写道
楼主不都说了不能用Math下面的方法吗.怎么还有人用abs啊?
我觉得楼主的方法可以

不好意思,是我之前忘了加上去的,后面才补上。
57 楼 topcode 2009-12-10  
楼主不都说了不能用Math下面的方法吗.怎么还有人用abs啊?
我觉得楼主的方法可以
56 楼 rplees 2009-12-10  
night_stalker 写道
tinywind 写道
  static int max(int a, int b){
    int r[]={a,b};
    return r[(a-b)>>>31];
  }



(刚刚修改了:一开始没考虑到两个相等的情况 ……)
或者
int mask = ((a-b) >>> 31) - 1;
return (a & mask) | (b & ~ mask);


既然是相等的话,那最值随便哪个都可以的吧。
55 楼 zozoh 2009-12-10  
Trustno1 写道
其实用这种题考数学知识没太大意思。题目太大路,要么不知道,要么都是google面筋来的.
如果要考数学知识,就因该问这样的题目。恩比如说
我们现在知道自然数集N,同时也知道了自然数的加法,但是我们尚不知道负数与减法的存在,你能通过加法构造出减法和负数么?并且说明为什么你构造的数系能够与我们的日常经验保持一致?


这样成不:

因为:
5 + 10 == 15

如果这样看:
(5+) 10 == 15

那么:
10 == 15 (5+)

所以:
5+  就是 -5

总结:
  • 左式的格式必须为  ^(X+)*(X)$
  • (X+) 从左式移动到右式,保持不变
  • (X) 从左式移动到右式,要变成 (X+)


因此:

(3+) (4+) 5 == 12
=> (3+) 5 = 12 4(+)
=> 3 = 12 (4+) (5+)

从右式移动到左式,还需要更多的规则  ...


54 楼 czwlucky 2009-12-10  
iaimstar 写道
superxielei 写道
int getMaxNum(int a,int b){
  double x = (double)a;
  double y = (double)b;
  return (int)(x/2+y/2+Math.abs(x/2-y/2));
}

你这个方法
不错
如果是考数学基础的话,楼主就悲剧了

如果可以用Math.abs的话,为什么不可以用Math.max呢?岂不更简单?
53 楼 luolonghao 2009-12-10  
night_stalker 写道
Trustno1 写道
int max(int x,int y)
{
return x ^ ((x ^ y) & -(x < y));
}

这是 C …… 太适合做 bit 运算了。题目的难点之一便是用 java ……

嘛,各种奇怪的解答都是有的:
def max x, y
  [y, x, x][(x <=> y) + 1]
end




sub max {
    (@_, $_[1])[($_[1] <=> $_[0]) + 1];
}

52 楼 95304164 2009-12-10  
看了这么多,觉得楼主的办法和那个左移都很好,毕竟就是看看思维,不一定要解的多准确
51 楼 Trustno1 2009-12-10  
其实用这种题考数学知识没太大意思。题目太大路,要么不知道,要么都是google面筋来的.
如果要考数学知识,就因该问这样的题目。恩比如说
我们现在知道自然数集N,同时也知道了自然数的加法,但是我们尚不知道负数与减法的存在,你能通过加法构造出减法和负数么?并且说明为什么你构造的数系能够与我们的日常经验保持一致?
50 楼 iaimstar 2009-12-10  
49 楼 night_stalker 2009-12-10  
Trustno1 写道
int max(int x,int y)
{
return x ^ ((x ^ y) & -(x < y));
}

这是 C …… 太适合做 bit 运算了。题目的难点之一便是用 java ……

嘛,各种奇怪的解答都是有的:
def max x, y
  [y, x, x][(x <=> y) + 1]
end


# 只对非负整数有效
def max x, y
  x + y - ('1' * x)[0...y].size
end
48 楼 iaimstar 2009-12-10  
偶像来了~
47 楼 Trustno1 2009-12-10  
int max(int x,int y)
{
return x ^ ((x ^ y) & -(x < y));
}
46 楼 prothi 2009-12-10  
公司有毛病吗?
45 楼 berlou 2009-12-10  
当前TDD可能是个趋势,
public int max(int a, int b);

谁来写写测试用例来检验大家各自的算法的正确性?
44 楼 berlou 2009-12-10  
我补充个问题, 可能更考究一个程序员对企业和业务的价值:
谁能写出完整的关于楼主这个问题的测试用例?

相关推荐

    37.java判断语句.zip

    37.java判断语句.zip37.java判断语句.zip37.java判断语句.zip37.java判断语句.zip37.java判断语句.zip37.java判断语句.zip37.java判断语句.zip37.java判断语句.zip37.java判断语句.zip37.java判断语句.zip37.java...

    MATLAB中的if判断语句.md

    ### MATLAB中的if判断语句详解 #### 一、引言 在编程中,条件判断是实现逻辑控制的基础之一。MATLAB作为一种广泛应用于科学计算、数据分析及算法开发的强大工具,提供了丰富的控制流语句来帮助用户根据不同的条件...

    转置矩阵的实现(无判断语句)

    4. **算法优化**:在某些情况下,避免if判断语句可以提高代码的执行效率,特别是在大规模计算中。 综上所述,无判断语句的矩阵转置实现方法利用了数组的索引特性,减少了程序的复杂性,提高了效率。这种技术在处理...

    Python基础教程-2.1python条件判断语句.pdf

    《Python基础教程-2.1python条件判断语句》这篇文档详细介绍了Python编程中的条件判断语句,这是控制程序流程的重要工具。条件语句允许程序员根据特定条件执行不同的代码块,以此实现更复杂的逻辑。 首先,文章介绍...

    MS SQL Server查询小数位数语句

    MS SQL Server查询语句,以小数位数作为条件,可查询符合条件的记录。可查询多位小数位数。

    题目打印出所有的“水仙花数”-最大数问题:从键盘上任意输入10个整数,求出其中的最大数

    例如,在求最大数问题中,只需进行n-1次比较即可确定一组数中的最大数。 八、编程调试与测试 编程过程中,调试与测试是不可或缺的部分。通过测试不同的输入情况,可以验证程序的鲁棒性和正确性。在本例中,需要验证...

    例4.2,例4.2输入俩个实数按由小到大的顺序输出这俩个数,matlab源码.zip

    本示例“例4.2,例4.2输入俩个实数按由小到大的顺序输出这俩个数,matlab源码”旨在教授如何在MATLAB中接收用户输入的两个实数,并按照从小到大的顺序进行输出。以下是关于这个主题的详细解释: 首先,MATLAB中的`...

    判断密码必须包括大小写字母,特殊字符,数字,长度8到16位

    本文将围绕“判断密码必须包括大小写字母、特殊字符、数字且长度限制在8到16位之间”这一需求展开,详细介绍如何通过编程实现这一功能,并分析其中涉及的关键技术点。 #### 二、密码复杂度要求 根据题目描述,一个...

    判断语句 三目运算符代码

    判断语句 三目运算符代码

    Python学习第二课 if判断语句

    01_判断年龄.py 02_判断年龄改进.py 03_逻辑运算演练.py 04_逻辑运算符演练2.py 05_逻辑运算符演练3.py 06_女朋友的节日.py 07_火车站安检.py 08_石头剪刀布.py

    求水仙花数小程序,VB源码

    在VB(Visual Basic)中编写寻找水仙花数的小程序,可以很好地帮助初学者理解循环、条件判断以及数值运算等基础知识。 首先,我们需要了解VB的基本结构。VB是一种事件驱动的编程语言,它的程序由一系列的事件过程...

    C#if判断语句。。。。。

    cvnbc天人合一突然发话更符合规范 提供方花费花费花费

    求100之内自然数中最大的能被17整除的数.doc

    在这个程序中,我们使用了for循环来遍历100之内的自然数,并使用if语句来判断当前数是否能被17整除。如果能被整除,我们就break循环,并输出当前数。 知识点:for循环、if语句、break语句、模运算符(%) 2. a,b,c...

    E4A易安卓判断奇偶数源码

    E4A易安卓判断奇偶数源码。对某些数组进行处理时,需要取偶数项元素,因此用到判断奇偶数方法,自己写了个判断正整数为奇数还是偶数的方法,比较简单,也很方便调用,供大家参考

    IF判断语句和FOR循环语句的搭配使用.xlsm

    IF判断语句和FOR循环语句的搭配使用.xlsm

    vb求最大公约数和最小公倍数

    在上面的代码中,我们首先将两个数字赋值给变量a和b,然后使用If语句判断哪个数字更大,从而确定最大公约数的初始值。然后,使用Do While循环语句来寻找最大公约数。在每次循环中,我们判断当前值是否能够被a和b整除...

    Python基础教程之if判断,while循环,循环嵌套

     判断语句又被称为分支语句,有判断,才有分支; if判断语句基本语法 if语句格式: if 判断的条件:  条件成立后做的事  … … 代码缩进为一个tab键,或者四个空格,官方建议使用空格;但应注意,在python开发中...

    java_判断与循环语句笔记

    java_判断与循环语句笔记,每一个知识点都实例辅佐理解!

    SQL 水仙数求法

    在实际应用中,如果需要将这个功能集成到数据库查询中,可能需要将其转换为SELECT语句,或者作为存储过程或函数来调用。 总结一下,解决SQL水仙花数问题的关键在于: - 使用循环结构遍历可能的数字范围。 - 分解...

    区间内水仙花数的个数

    看了网上求水仙花个数的代码,都是指定100-1000的固定区间。 于是写了个可变区间的小程序。 输入样例: 10 10000 输出: 个数

Global site tag (gtag.js) - Google Analytics