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

如何编写LMC程序实现输入数列最大值统计与输入数量计数

LMC 序列最大值与计数程序实现

核心逻辑梳理

先明确执行流程,覆盖所有需求边界:

  • 初始化两个存储单元:计数COUNT(初始值0)、最大值MAX(初始值0)
  • 循环读取输入:
    • 读取输入值存入临时单元INPUT_VAL
    • 若输入值为0,直接跳转到结果输出逻辑
    • 输入非0时,计数+1
    • 将输入值与当前最大值对比,若输入值更大则更新最大值
    • 无条件跳转回输入步骤,读取下一个值
  • 结果输出逻辑:
    • 若计数为0,说明仅输入了结束标记000,直接输出0即可终止程序
    • 若计数不为0,先输出最大值,再输出总个数,之后终止程序

用到的分支指令说明

你提到的三类分支指令刚好覆盖所有判断场景:

  • BRZ:累加器值为0时跳转,用于判断输入是否为结束标记、计数是否为0
  • BRP:累加器值为非负时跳转,用于数值大小比较(输入值减最大值结果非负,说明输入值更大)
  • BR:无条件跳转,用于实现输入循环

完整可运行LMC代码(带注释)

// 初始化部分
START   LDA ZERO      // 累加器加载0
        STA COUNT     // 计数初始化为0
        STA MAX       // 最大值初始化为0

// 输入循环部分
INLOOP  INP           // 读取输入
        STA INPUT_VAL // 存入临时输入单元
        BRZ ENDINPUT  // 输入为0,跳转到结束逻辑
        LDA COUNT     // 加载当前计数
        ADD ONE       // 计数+1
        STA COUNT     // 存回计数单元
        LDA INPUT_VAL // 加载当前输入值
        SUB MAX       // 输入值减当前最大值
        BRP UPDATEMAX // 结果>=0,说明输入更大,跳转到更新最大值
        BR INLOOP     // 否则直接跳回下一轮输入

UPDATEMAX LDA INPUT_VAL // 加载当前输入值
        STA MAX       // 更新最大值
        BR INLOOP     // 跳回下一轮输入

// 结果输出逻辑
ENDINPUT LDA COUNT    // 加载计数
        BRZ ONLYZERO  // 计数为0,说明仅输入了0,跳转到输出0
        LDA MAX       // 否则先加载最大值
        OUT           // 输出最大值
        LDA COUNT     // 加载计数
        OUT           // 输出总个数
        HLT           // 终止程序

ONLYZERO LDA ZERO     // 加载0
        OUT           // 输出0
        HLT           // 终止程序

// 变量定义
ONE     DAT 1         // 常量1,用于计数+1
ZERO    DAT 0         // 常量0
COUNT   DAT 0         // 计数存储单元
MAX     DAT 0         // 最大值存储单元
INPUT_VAL DAT 0       // 输入临时存储单元

测试场景验证

  • 输入仅为000:输出000,符合要求
  • 输入序列为3、5、2、0:依次输出5、2,符合要求
  • 输入序列为9、9、9、0:依次输出9、3,符合要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 06:24:03