`
wujiazhao88
  • 浏览: 11314 次
  • 性别: 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;
}

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

分享到:
评论
43 楼 iaimstar 2009-12-10  
这个帖子 其实体现了 目前 搞java的 群体的基础之薄弱
42 楼 vieri122 2009-12-10  
Hooopo 写道
 min = (a + b - (a - b).abs) / 2.0





精彩的解法
41 楼 wujiazhao88 2009-12-10  
guoapeng 写道
wujiazhao88 写道
呵呵,这个问题不错,引出这么多后续的有趣的问题

转成2进制格式的字符串,读第一位。

恩,我知道的,第一位为1就是负数,为0就是正数
40 楼 guoapeng 2009-12-10  
wujiazhao88 写道
呵呵,这个问题不错,引出这么多后续的有趣的问题

转成2进制格式的字符串,读第一位。
39 楼 night_stalker 2009-12-10  
iaimstar 写道
64位机怎么办

java int 仍然是 32 位,标准规定了的。
38 楼 wujiazhao88 2009-12-10  
呵呵,这个问题不错,引出这么多后续的有趣的问题
37 楼 iaimstar 2009-12-10  
64位机怎么办
36 楼 guoapeng 2009-12-10  
用hashmap 也可以实现:
c = a-b;
用移位操作取得符号位的值 0 或1

hashmap 里的初始值 0, true
                  1,false

然后根据符号位,取得 true 或者 false
返回。
35 楼 ray_linn 2009-12-10  
haojia0716 写道
我也出一个题.
不能用任何语言,包括机器语言,汇编,中级语言,高级语言,比较两数大小,要求能在电脑上运行出结果.


无聊吧,我自己在屏幕上按出结果成不
34 楼 night_stalker 2009-12-10  
haojia0716 写道
我也出一个题.
不能用任何语言,包括机器语言,汇编,中级语言,高级语言,比较两数大小,要求能在电脑上运行出结果.

你说那两个数分别是多少,我马上给出答案。
33 楼 ray_linn 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);



贼个是与机器码相关的(IL也算某种机器码),虽然Java fix的int的长度。
32 楼 night_stalker 2009-12-10  
好吧,考虑溢出的,不管正负都 OK 的版本:

int r[][][] = {{{a,b}, {a,a}}, {{b,b}, {a,b}}};
return r[a >>> 31][b >>> 31][(a - b) >>> 31];


(刚刚又修改了一下,让它看起来更神奇 
31 楼 wujiazhao88 2009-12-10  
guoapeng 写道
try{
    try{
      int c = a-b + Integer.maxValue;
      throw new ALessThanBException()
    }catch(Exception){
      throw new AMoreThanBException()
    }

}catch(ALessThanBException exp){
return false;

}catch(AMoreThanBException){
  return true;
}

恩,这个也是异常的实现方式,而且不用管正负数
30 楼 guoapeng 2009-12-10  
或者
try{
      int c = a-b + Integer.maxValue;
       return false;
    }catch(Exception){
      return true;
    }
29 楼 guoapeng 2009-12-10  
try{
    try{
      int c = a-b + Integer.maxValue;
      throw new ALessThanBException()
    }catch(Exception){
      throw new AMoreThanBException()
    }

}catch(ALessThanBException exp){
return false;

}catch(AMoreThanBException){
  return true;
}
28 楼 guoapeng 2009-12-10  
a-b>0?true:false

没有if else
27 楼 wujiazhao88 2009-12-10  
幸存者 写道
楼主的方法肯定不行,如果a,b是负数怎么办?

还有,直接用(a-b)>>31这种办法的有没有想过溢出的情况?

恩,被你说中了,我这个只是正整数适用
26 楼 BestUpon 2009-12-10  
<p>
</p>
<pre name="code" class="java">
</pre>
<pre name="code" class="java">这样不是也很方便么?</pre>
<pre name="code" class="java">public class ChageAtoB {

/**
* 修改人: bestupon 修改时间:2009-11-1 上午11:43:58 修改目的:
*/
public static void main(String[] args) {
int a = 1;
int b = 2;
a = a ^ b;
b = b ^ a;
a = a ^ b;
System.out.println(a + "," + b);
a = 1;
b = 2;
a = a + b;
b = a - b &lt; 0 ? b - a : a - b;
a = a - b &lt; 0 ? b - a : a - b;
System.out.println(a + "," + b);
a = 1;
b = 2;
a = a * b;
b = a / a;
a = a / b;
System.out.println(a + "," + b);
}

}</pre>
 
25 楼 幸存者 2009-12-10  
楼主的方法肯定不行,如果a,b是负数怎么办?

还有,直接用(a-b)>>31这种办法的有没有想过溢出的情况?
24 楼 sunjun 2009-12-10  
int result= a>b ? a : b;

相关推荐

    易语言判断语句+循环语句应用

    易语言判断语句+循环语句应用 学东西真的是欲速则不达,现在起我不在拿整例来研究,真正从0开始学习,并把学习过程写成例子来说明,我的口号是“教=学+练”,这次是判断+循环语句应用及我个人的理解,应该从最基本...

    MATLAB中的if判断语句.md

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

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

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

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

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

    MS SQL Server查询小数位数语句

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

    例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

    day2判断大小以及if条件语句shell编程.txt

    day2判断大小以及if条件语句shell编程.txt

    if语句练习题目

    这个例子中,`if`语句用于判断输入的数是否满足水仙花数的定义,并给出相应的反馈。 #### 题目3:检查回文数 题目要求判断一个5位数是否为回文数,即正读反读都相同的数。 ```python num = input("请输入一个5...

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

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

    VB 求三个数中的最值

    条件语句是最基础的比较方式,它允许我们通过编程逻辑来判断三个数之间的大小关系。以下是一个使用IF...THEN...ELSE语句来找出最大值的VB代码示例: ```vb Dim num1 As Integer Dim num2 As Integer Dim num3 As ...

    判断每个输入的数是否可被3,5和7整除,并将整除状态输出。

    在编程领域,尤其是在C#语言中,我们经常需要进行各种条件判断来确定数值是否满足特定的整除条件。本题目要求我们编写一个程序,检查用户输入的每一个数是否可以被3,5和7整除,并根据整除状态给出相应的输出。下面...

    c++入门内容(if语句)经典例题:(闰年判断.cpp)

    输入年份,输出是否是闰年

Global site tag (gtag.js) - Google Analytics