C ++用户定义的序列整数,不使用数组

时间:2017-02-07 19:29:38

标签: c++ user-defined

我试图自己解决这个问题而我不能。 教授要求这样做。 用户将定义序列的长度。 然后,用户将输入任何范围内的数字,包括neg和pos。 该程序: 找到两个最大的数字并按降序显示。 找到两个最小的数字并按升序显示。

无法使用排序或数组。  我有一个大纲但是,我的脑袋只是想使用数组.....我没有看到这个简单没有数组。困惑。我是初学者。我只是想要帮助。建议吗?导师?

2 个答案:

答案 0 :(得分:2)

从一个更简单的问题的解决方案开始,并将其发展为您正在解决的实际问题的解决方案:

  • 编写一个程序,查找并打印用户输入的最大数字。单个变量跟踪“高水印”
  • 很容易做到这一点
  • 修改您的程序以跟踪最小的数字。您可以通过添加另一个变量并跟踪“低水印”来实现。

上述两项任务中的挑战是高/低水印的初始值。这是一个常见的错误来源; SO上有多个Q& As解释修复。

现在有趣的部分:

  • 修改您的程序以跟踪第二大数字,通过“降级”以前认为最大的数字到每次找到大于最大数字的第二大数字,并替换第二个数字 - 当您在其上方找到一个不超过最大值的值时,显示最大值。

这需要您编写几个if语句。

  • 最后,修改您的程序,通过应用上述算法的“镜像”来跟踪第二小的数字。

答案 1 :(得分:0)

算法 (“在不存储序列的情况下查找序列中的两个最大数字”)

(我决定取消删除这个答案。可能有助于OP远离阵列框架)

Input: A sequence of values S.
Output: Values Max and SecondMax.

The consumed, current value of S is E
1 : Set Max to E
2 : Set SecondMax to E (Second value in S)
3 : If Max < SecondMax -> Swap Max and SecondMax.
4 : while ( e:= E exists)
4.1 : If ( e > Max ) SecondMax := Max, Max := e
4.1.1 : Else If ( e > SecondMax ) SecondMax := e

这可以简单地扩展到最低限度。