伪代码 - 最大到最小的整数

时间:2013-12-12 15:37:33

标签: algorithm

编写一个将以五个正整数(一次一个)读取的程序,并打印出五个数字中最大和最小的数字。该程序应该一次读取一个数字。


请注意,这是伪代码,不能用任何语言完成。  我的问题是如何设置它以便5个整数保存为值,以便我可以显示它们。 不想要答案,只是一个开始。

3 个答案:

答案 0 :(得分:2)

如果你只需要报告最大的数字,你会如何解决同样的问题?伪代码将类似于以下

consider the first number to be largest 
for each of the rest of the number
  if it is larger then the current largest
    assign to largest

如果有两个,你会怎么做?

consider the first number to be largest 
if second number is larger then the largest
  consider the second number to be largest, first to be 2nd largest
else
  consider the first number to be largest, second to be 2nd largest
for each of the rest of the numbers
  if it is larger then the largest 
    consider current largest to be 2nd largest and this number to be largest
  else if it is larger then the 2nd largest
    consider it to be 2nd largest

但如果有三个或更多,这可能会变得丑陋。我们如何保持N最大数量?显然,我们需要一个N已排序数字的列表。我将留给你如何维护该列表,但这是使用该方法的伪代码

 populate the top-list with first N numbers from input, ensure the top-list is sorted
 for each of the rest of the numbers
 if the number is larger then any number in the top-list
   insert it at the right place in top list, pushing out the smallest element of the top list

现在的问题是:这比排序列表并获取前N个和后N个元素更好吗?

答案是“它取决于”。你能弄清楚一种方法比另一种更好的情况吗?

答案 1 :(得分:1)

当您读取数字时,跟踪当前最大和最小的数字,并在输入进入时更新值。这样做的优点是它适用于长序列数。我的意思是这样的:

min = 0
max = 0
while input:
   read number from input
   if number < min:
       min = number
   if number > max:
       max = number

答案 2 :(得分:-2)

首先,您应该阅读用户的输入,如果可能,将输入保存为数字。 例如,在C中,可以使用scanf("%d",&var[x])完成,其中var是整数数组。 检索完所有数字后,您必须按值对它们进行排序。为此,您可以使用冒泡排序;像这样的东西:

for(x = 0; x < 4; x++)
    for(y = 1; y < 5; y++)
        if(var[x] > var[y]) {
            temp = var[x];
            var[x] = var[y];
            var[y] = temp;
        }

可以大致翻译为if A is bigger than B, swap them.这样,在var[0]中,您的号码最小,而在var[5]中您的号码最多。然后,您只需要显示数组中的第一个和最后一个数字。