三个数求最大值的五种算法
小算法,大道理。三个数中求最大值应该是各位学习算法学习语言必经历的一道坎儿吧。今天突然想捋一捋实现的几种方法,因为我们知道Java(C语言里面也有三目运算符)里面是有三目运算符呢,同时我们知道本来这就是个分支结构的典型例题之一,通过最基础的分支结构也可以实现。本文章用 Java语言作示范来整理一下求最大值的思路。为了捋清脑回路特写此文章记录下来同时也可帮小伙伴们梳理一下。大神请不要嘲笑我啊!!我知道我菜!!!
1. 运用三目运算符
public static void main(String[] args) {
// 随便定义几个变量啦
int a = 20;
int b = 30;
int c = 10;
int max;
max = a >= b ? a : b;
max = max >= c ? max : c;
// 来一个比较烧脑的形式
// max = a >= b ? a >= c ? a : c : b >= c ? b : c (非常不建议使用!!)
}
第一种我们可以采用三目运算符提取其中最大值,max 既是中间变量同时兼顾承担最后结果的双重作用,棒棒哒!上面这种作法还是十分可取的,但是注释部分想要秀一秀的小伙伴就算了吧…没人想看见这种代码的,可读性太差了。
2. if-else 语句再加上 && 运算符
public static void main(String[] args) {
int a = 20;
int b = 30;
int c = 10;
if (a >= b && a >= c) {
System.out.println("三个数中最大值为 " + a);
} else if (b >= a && b>= c) {
System.out.println("三个数中最大值为 " + b);
} else {
System.out.println("三个数中最大值为 " + c);
}
}
第二种我们用if-else 分支语句再搭配 && 运算符,这个的思路大概就是要么 a 最大,要么b 最大,不然肯定就是我 c 最大。十分通俗理解哈哈!
3. if 语句
public static void main(String[] args) {
int a = 20;
int b = 30;
int c = 10;
int max = a; // 先把 a 赋给 max
if (b >= max){ // 如果 b大于 max,则将 b 赋值给 max
max = b;
}
if (c > max) { // 如果 c大于 max,则将 c 赋值给 max
max = c;
}
}
第三种方法只用到两次 if 语句就可以达到求得最大值的目的,具体方法就是 事先先将 a 值赋值给 max 值,再依次比较b、c 的值同 max 值的大小,如果大于 max 则将自己赋值给 max,达到提取最大值的目的。
4. if-else 语句
public static void main(String[] args) {
int a = 20;
int b = 30;
int c = 10;
int max;
if (a >= b){
max = a;
} else {
max = b;
}
if (c > max) {
max = c;
}
}
第四种方法可能是在现实生活中潜意识中的算法,可能是娘胎时候妈妈都在唠叨,就是先比较前两个值看看哪个最大,再拿两者中最大值和第三个值做比较,进而得出结果。这种方法和上一种是不是看起来有点相似,上一种是假设a 是最大的,然后只用 if-else 就可以得出结果,这种是先比较得出个较大者赋给 max ,之后再和c比较。。
大家有没有发现,只要是涉及到 分支结构 的算法基本都是大同小异,所以说只要我们想清楚里面的道理,还是比较容易的。我也不知道我闲着无聊在家整理个这个干嘛…
5. if 嵌套
public static void main(String[] args) {
int a = 20;
int b = 30;
int c = 10;
int max;
if (a >= b) {
if (a >= c) {
max = a;
} else {
max = c;
}
} else {
if (b >= c) {
max = b;
} else {
max = c;
}
}
}
这个代码看起来是所以算法中最长的,但它和第二种采用 逻辑运算符 && 有异曲同工之妙,所以说我们平时最不起眼的求 max 值居然罗列下来有这么多条!是不是很吃惊,但是基本上属于在一个圈子里瞎绕绕,没啥卵用…你可以看成我为了锻炼逻辑能力瞎捣鼓的文章。。
注意点
既然谈到了逻辑运算符了我们就简单说一下 && 和 & (|| 和 | 同理)的区别吧?
我们首先要清楚一点, && 和 & 结果绝对是完全一样的!这一点绝对不会变。区别就在于, &&比较聪明,它只要看到前面一个是 false 了,直接可以得出结果,不用去管后面这个值啊表达式的死活。 而& 就比较傻了,不管前面是 false 还是 true,它都得全部判断一下。光听这些,大家就知道了,&&运算速度绝对是高于 &的,所以在开发中最常用的便是 双与 与 双或 了。这是一个小知识点,大家以后用到这个直接用 && 就可以啦。
道理这么简单,,怎么平时就想不到呢???
多发现多思考多总结,让我们一起在学习的路上奋斗不止!!