【问题标题】:LMC program to find the difference between double the median and the smallest of 3 inputs?LMC 程序找出双倍中位数和 3 个输入中最小值之间的差异?
【发布时间】:2015-11-02 11:33:18
【问题描述】:

我想编写一个 LMC 程序来有效地找出 3 个不同输入中的中位数的两倍和最小的输入之间的差异。我需要一些帮助来找出一个算法。

这是我目前所拥有的:

INPUT 901 - Input first
STO   399 - Store in 99 (a)
INPUT 901 - Input second
STO   398 - Store in 98 (b)
INPUT 901 - Input third
STO   397 - Store in 97 (c)
LOAD  597 - Load 97 (a) 
SUB   298 - Subtract 97 - 98 (a - b)
BRP   8xx - If value positive go to xx (if value is positive a > b else b > a)
LOAD  598 - Load 98 (b)
SUB   299 - Subtract 98 - 99 (b - c)
BRP   8xx - If value positive go to xx (if value is positive b > c else c > b)
LOAD  598 - Load 98 (b) which is the median
ADD   198 - Double to get "twice the median"

我意识到在 sn-p 结束时我不知道哪个输入是最小的,并假设输入已经排序(它们不是)。

我认为我需要以某种方式将输入从最小到最大排序,以有效地执行此操作并确定同一分支中的最小输入和中位数。

【问题讨论】:

    标签: algorithm little-man-computer


    【解决方案1】:

    我不懂小人机语言,不过没关系,这是一道算法题。

    首先,您对三个参数的命名有点混乱(首先您说 99 是 a,然后您说 97 是 a)。

    您必须加载 99、98、97 中的三个参数(比如 a、b、c)。 然后,加载 99 (a) 并从 99 (a) 中减去 98 (b)。

    如果结果为正(99 大于 98),则必须交换 98 和 99,因此两者之间的最小值位于 99 位置。

    现在加载 98 (c) 并从中减去 97。如果结果为正,则交换 97 和 98,因此两者之间最小的是位置 98。

    最后,你在 98 和 99 位置有两个最小的数字,即最小和中位数。

    加载 99 并从中减去 98。如果结果为正,则 99 包含中位数,98 为最小,否则相反。

    现在您可以将中位数加倍,并计算此数字与最小值之间的差。

    【讨论】:

    • 当你在第四段中说“load 98 (c)”时,你的意思是b吗?
    猜你喜欢
    • 2015-11-12
    • 1970-01-01
    • 1970-01-01
    • 2015-10-08
    • 1970-01-01
    • 1970-01-01
    • 2021-10-13
    • 2013-11-10
    • 1970-01-01
    相关资源
    最近更新 更多