LMC 程序找出双倍中值和最小的 3 个输入之间的差异?

LMC program to find the difference between double the median and the smallest of 3 inputs?

我想编写一个 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"

我在代码片段的末尾意识到我不知道哪个输入是最小的并且假设输入已经排序(但实际上没有)。

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

不懂小人机语言,不过没关系,算法题。

首先,你把三个参数命名有点混乱(先说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包含最小值,否则相反。

现在你可以将中位数加倍,并计算这个数与最小数的差值。