如何解决对五个数字中的最小到最大排序
我需要从最小到最大对五个数字进行排序。
我一直在为 Little Man 计算机模拟器的任务而苦苦挣扎。我尝试添加更多循环来添加 2 个输入数字,但它从未奏效。
3 个号码的工作分拣机:
INP // Read in the first value
STA 91 // store it
INP // Read in the second value
STA 92 // store it
INP // Read in the third value
STA 93 // store it
LDA 92 // LOOP 1,STEP 1:
SUB 91 //
BRP STEP2 // if r91 and r92 are in order,don't swap them
LDA 92 // Begin swapping registers
STA 99 // temp = r92
LDA 91
STA 92 // r92 = r91
LDA 99
STA 91 // r91 = temp
STEP2 LDA 93 // LOOP 1,STEP 2
SUB 92
BRP STEP3 // If r92 and r93 are in order,don't swap them
LDA 93 // Begin swapping registers
STA 99 // temp = r93
LDA 92
STA 93 // r93 = r92
LDA 99
STA 92 // r92 = temp
STEP3 LDA 92 // LOOP 2,STEP 1
SUB 91
BRP STEP4 // if r91 and r92 are in order,don't swap them
LDA 92 // Begin swapping registers
STA 99 // temp = r92
LDA 91
STA 92 // r92 = r91
LDA 99
STO 91 // r91 = temp
STEP4 LDA 91 // Write out the sorted values
OUT
LDA 92
OUT
LDA 93
OUT
HLT // stop
解决方法
现有代码有三个步骤用于比较和潜在交换。第一步比较前两个值,第二步比较后两个值,第三步和第一步一样:再次比较前两个值。
当您输入 5 个值时,您需要一个循环,否则您无法在可用的 100 个邮箱中进行所有必要的比较。为此,您可以使用像冒泡排序这样的算法,它还会比较相邻的值对:
- 第 1 步:比较值 1 和 2
- 第 2 步:比较值 2 和 3
- 第 3 步:比较值 3 和 4
- 第 4 步:比较值 4 和 5
每一步的代码就像你已经有了一样,除了你还要注意是否执行了交换。这将表明需要再次重复上述所有步骤。
你所包含的代码没有使用标签,很可惜注释中需要给数字命名,而大多数LMC模拟器都支持标签。
这是它的工作原理:
#input: 5 3 4 2 1
INP
STA NUM1
INP
STA NUM2
INP
STA NUM3
INP
STA NUM4
INP
STA NUM5
BEGIN LDA ZERO
STA DIRTY
LDA NUM2
SUB NUM1
BRP STEP2
LDA ONE
STA DIRTY
LDA NUM1
STA TEMP
LDA NUM2
STA NUM1
LDA TEMP
STA NUM2
STEP2 LDA NUM3
SUB NUM2
BRP STEP3
LDA ONE
STA DIRTY
LDA NUM2
STA TEMP
LDA NUM3
STA NUM2
LDA TEMP
STA NUM3
STEP3 LDA NUM4
SUB NUM3
BRP STEP4
LDA ONE
STA DIRTY
LDA NUM3
STA TEMP
LDA NUM4
STA NUM3
LDA TEMP
STA NUM4
STEP4 LDA NUM5
SUB NUM4
BRP CHECK
LDA ONE
STA DIRTY
LDA NUM4
STA TEMP
LDA NUM5
STA NUM4
LDA TEMP
STA NUM5
CHECK LDA DIRTY
BRZ OUTPUT
BRA BEGIN
OUTPUT LDA NUM1
OUT
LDA NUM2
OUT
LDA NUM3
OUT
LDA NUM4
OUT
LDA NUM5
OUT
HLT
NUM1 DAT
NUM2 DAT
NUM3 DAT
NUM4 DAT
NUM5 DAT
DIRTY DAT
TEMP DAT
ONE DAT 001
ZERO DAT 000
<script src="https://cdn.jsdelivr.net/gh/trincot/lmc@v0.816/lmc.js"></script>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。