Algorithm 接受4个输入并打印三个数字中最大值/最佳值之和的伪算法
我需要一些关于伪代码作业的帮助: 输入4个数字并打印最大3个数字的总和 例如: 输入:14,1,9,3 产出:14+9+3=>26 如何用上述任务的伪代码编写算法 到目前为止,我已经得出以下结论:Algorithm 接受4个输入并打印三个数字中最大值/最佳值之和的伪算法,algorithm,pseudocode,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>=
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
这有什么好处吗
t
中sum=t[0]
min=t[0]
i
,重复步骤5和6:sum+=t[i]
if(min>t[i])min=t[i]
sum-min
我更喜欢上面所示的方法,因为它保证了线性时间复杂度,可以很好地扩展,并且易于实现。它只通过一次输入数据,如果输入一个接一个地流式传输,并且我们不想将输入存储在内存中(我们想“动态地”执行),则可以使用它。如果对输入数据没有任何假设,排序可能比线性(可能是nlogn)更昂贵。您的伪代码有一个良好的开端。但现在你只能找到四个数字中最大的一个。您需要再重复两次(忽略最大值)才能找到第二和第三大值 另一个聪明的想法是,如果你需要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
输入a、b、c、d
声明min
//找到最小的
最小=a
如果(b
使用递归。如果输入中的第一个数字最小,则将其他三个数字相加,否则旋转输入并递归调用。最后,最小的数字将是a,因此其他三个是最大的,您可以将它们相加并返回答案。在伪代码中:
function sum3max(a, b, c, d)
if a == min(a, b, c, d)
return b + c + d
return sum3max(b, c, d, a)
伪代码只是编写您将要采取的步骤,而不关心实际的代码语法。在您解决头脑中的问题时,仔细观察您自己的思维过程。快点,在你忘记之前,写下你想到的步骤!假设没有相等的值(请注意),您的伪代码将(唯一的)最大值赋给一个h变量。其他h变量未被触及。items.Sum()-items.Min()作为print a+b+c+d-Min(Min(a,b),Min(c,d)),您的伪代码中仍然存在错误。如果
(a,b,c,d)=(1,1,1,2)
,总和将是未定义的。事实上,在没有明确最低限度的情况下,这种情况都会发生。@JuanLopes你是对的。我只是假设了4个不同的数字,但我会修正它。