You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在仅用>、<运算符时,从输入中找出第二大值(输入至负数停止)

仅用>、<运算符实现输入序列的最大值与第二大值统计

需求说明

  • 仅允许使用>、<运算符,禁止调用min()/max()函数
  • 程序持续请求用户输入数值,直到输入负数时终止运行
  • 第一个输入的数值同时作为初始最大值和第二大值
  • 后续输入的数值按以下规则更新最大值与第二大值:
    • 第二个输入:
      • 若大于当前最大值 → 该数值成为新的最大值,原最大值降级为第二大值
      • 若小于当前最大值 → 该数值成为新的第二大值,原最大值保持不变
    • 第三个及以后的输入:
      • 若大于当前最大值 → 原最大值降级为第二大值,该数值成为新的最大值
      • 若小于当前最大值但大于第二大值 → 该数值成为新的第二大值
      • 若小于等于第二大值 → 最大值与第二大值均保持不变

现有代码

seclarg = 0
large = 0
while n >= 0 :

    n = int(input("Value: "))
    if n > large :
        large = n

    if n > seclarg :
        seclarg = n

print(f"Largest: {large}")
print(f"Second largest: {seclarg}")

修正后的代码

# 先处理第一个输入
n = int(input("Value: "))
if n < 0:
    print("无有效输入")
else:
    large = n
    seclarg = n
    # 循环处理后续输入
    while True:
        n = int(input("Value: "))
        if n < 0:
            break
        # 根据规则更新最大值和第二大值
        if n > large:
            seclarg = large
            large = n
        elif n > seclarg and n < large:
            seclarg = n
        # 等于最大值或第二大值的情况无需处理,保持原有值

    print(f"Largest: {large}")
    print(f"Second largest: {seclarg}")

代码逻辑说明

  1. 先获取第一个输入,若为负数直接提示无有效输入;否则将该数值同时赋值给最大值large和第二大值seclarg
  2. 进入循环后,每次获取新输入,若输入为负数则终止循环
  3. 对新输入的数值进行判断:
    • 当数值大于当前最大值时,将原最大值转移给第二大值,再把新数值设为最大值
    • 当数值介于最大值和第二大值之间时,直接更新第二大值为该数值
    • 当数值等于最大值、等于第二大值或小于第二大值时,不做任何更新,确保符合需求中的规则

期望运行结果

Value: 5 
Value: 5 
Value: -1 
Largest: 5 
Second largest: 5 

内容的提问来源于stack exchange,提问作者Bobby Jackson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 01:15:31