伪算法,需要4个输入并打印三个数字中最大/最好的总和

时间:2015-03-03 16:30:24

标签: algorithm pseudocode

我需要帮助我在伪代码中的作业: 输入4个数字并打印最大3个数字的总和。

例如: 输入:14,1,9,3 输出:14 + 9 + 3 => 26

如何在上述任务的伪代码中编写算法?

到目前为止,我已经达到了这个目标:

input a, b, c, d
declare h1, h2, h3
    if(a>=b && a>=c && a>=d)    h1 = a
    if(b>=a && b>=c && b>=d)    h2 = b
    if(c>=a && c>=b && c>=d)    h3 = c
    if(d>=a && d>=b && d>=c)    h4 = d
print h1+h2+h3

这有什么好处吗?

3 个答案:

答案 0 :(得分:3)

  1. 让我们说输入在数组t中。
  2. 允许sum = t[0]
  3. 允许min = t[0]
  4. 对于i从1到3重复步骤5和6:
  5. sum += t[i]
  6. if (min > t[i]) min = t[i]
  7. 返回sum - min
  8. 你和Brian提出的另一种方法归结为分类(对于n = 4你可以做到"手动"就像你做的那样,但对于更大的n来说它不是一个好主意)然后拿出总和。

    我更喜欢上面显示的方法,因为它保证了线性时间复杂度,可以很好地扩展,并且易于实现。它完全通过输入数据传递,并且如果输入逐个流传输并且我们不想将输入存储在存储器中(我们想要这样做"在运行中&#) 34)。如果对输入数据没有任何假设,则排序可能比线性更昂贵(可以是nlogn)。

答案 1 :(得分:1)

你的伪代码是一个良好的开端。但是现在你只能找到四个数字中最大的一个。您需要重复两次(忽略最大值)才能找到第二和第三大。

另一个聪明的想法是,如果你需要3个最大的数字,你的第4个数字必须是最小的。找到最小的数字,然后添加其他数字。

input a, b, c, d
declare min

// find the smallest
min = a
if (b < min) min = b
if (c < min) min = c
if (d < min) min = d

// the sum of the largest 3 = the sum of all 4 minus the minimum
print a + b + c + d - min

答案 2 :(得分:1)

使用递归。如果输入中的第一个数字最小,则将其他三个相加,否则旋转输入并递归调用。最终,最小的数字将是a,因此其他三个是最大的,您可以将它们相加并返回答案。在伪代码中:

function sum3max(a, b, c, d)
    if a == min(a, b, c, d)
        return b + c + d
    return sum3max(b, c, d, a)