请解释四数最大值查找算法逻辑:为何无需额外两两比较?
为什么这段找最大值的代码不用重复和前面的数比较?
先看这段完整的Python代码:
n1 = int(input("Number 1: ")) n2 = int(input("Number 2: ")) n3 = int(input("Number 3: ")) n4 = int(input("Number 4: ")) if n1 > n2 and n1 > n3 and n1 > n4: greatest = n1 elif n2 > n3 and n2 > n4: greatest = n2 elif n3 > n4: greatest = n3 else: greatest = n4 print(f" {greatest} is the greatest of the numbers.")
这个算法的核心是**“前置淘汰逻辑”**,每一步判断都基于前面的条件不成立的前提,所以不用重复对比已经出局的数:
- 第一个
if判断n1是不是比所有数都大。如果成立,直接确定n1是最大值;如果不成立,说明n1肯定不是最大值(它至少比n2、n3、n4中的一个小),后续判断完全不用再考虑n1。 - 到第二个
elif时,已经默认n1不是最大值了,所以只要判断n2是不是比剩下的n3、n4大就行——如果n2比这两个都大,那它肯定比已经被淘汰的n1大(不然第一个if就会成立),所以n2就是最大值;如果这个条件不成立,说明n2也被淘汰。 - 第三个
elif触发时,n1、n2都已经出局,只剩下n3和n4,直接比这俩就行,大的那个就是最大值。 - 最后
else的情况,意味着前面所有条件都不成立,说明n1、n2、n3都比n4小,所以n4就是最大值。
简单说就是:每一步都先把不可能是最大值的数淘汰掉,剩下的只需要和还在候选池里的数对比,不用回头重复验证已经出局的数。
内容的提问来源于stack exchange,提问作者I Goodwin
相关产品推荐
相关产品推荐

