作业比赛编号 : 3070 - 【CSPtch-Jing】循环3 | 求最值

求最值:找出最大值和最小值

求最值

学会在一堆数字中,找出最大的数和最小的数。

一、什么是“最值”?

“最值”就是一组数字中最特别的数字:最大的叫最大值,最小的叫最小值。

最大值 像在比赛中找“跳得最远”的同学,要一直保留目前见过的最大数字。
最小值 像在一排书包中找“最轻”的书包,要一直保留目前见过的最小数字。

二、找最值的四个步骤

  1. 1
    先读入第一个数,把它同时当作目前的最大值和最小值。
  2. 2
    再读入下一个数,和目前的最大值、最小值比较。
  3. 3
    如果它更大,就更新最大值;如果它更小,就更新最小值。
  4. 4
    所有数字都看完后,答案就保存在 mx 和 mi 中。

小例子:数字 4、3、6、2、5

43625
从头比较到尾,最后得到:最大值是 6,最小值是 2。

三、C++ 求最大值和最小值模板

假设输入 n 个整数。变量 mx 保存最大值,变量 mi 保存最小值。
#include <iostream>
using namespace std;

int main() {
    int n, a;
    int mx, mi;

    cin >> n;       // 数字的个数
    cin >> a;       // 先读入第一个数字
    mx = mi = a;     // 第一个数字先同时当作最大值和最小值

    for (int i = 2; i <= n; i++) {
        cin >> a;

        if (a > mx) {
            mx = a;  // 找到更大的数
        }
        if (a < mi) {
            mi = a;  // 找到更小的数
        }
    }

    cout << "最大值:" << mx << endl;
    cout << "最小值:" << mi << endl;
    return 0;
}
记忆小口诀:先定一个,再比一比;更大就换最大,更小就换最小。

四、为什么不能随便把最大值设成 0?

如果输入的数字可能是负数,把最大值一开始设成 0 就可能出错。例如输入 -3 -8 -1,真正的最大值是 -1,但它们都比 0 小。
所以,更稳妥的办法是:先读入第一个数,再让它同时成为初始的最大值和最小值。

五、C 风格的整数边界常量

有时我们需要知道某种整数能表示的最大值和最小值。C++ 可以使用 <climits>(或旧写法 <limits.h>)中的常量。
常量表示什么常见类型
INT_MAXint 能表示的最大值int
INT_MINint 能表示的最小值int
LLONG_MAXlong long 能表示的最大值long long
LLONG_MINlong long 能表示的最小值long long
UINT_MAXunsigned int 能表示的最大值unsigned int
#include <iostream>
#include <climits>  // 提供各种整数边界常量
using namespace std;

int main() {
    cout << "INT_MAX: " << INT_MAX << endl;
    cout << "INT_MIN: " << INT_MIN << endl;
    cout << "LLONG_MAX: " << LLONG_MAX << endl;
    cout << "LLONG_MIN: " << LLONG_MIN << endl;
    cout << "UINT_MAX: " << UINT_MAX << endl;
    return 0;
}
小提醒:四年级学习求最值时,优先掌握“先读第一个数,再逐个比较”的方法。边界常量先知道它们的作用,遇到需要时再使用。
今天学会了:用一次循环,就能找出一组数字中的最大值和最小值。

比赛尚未开始或私有,不能查看题目。




返回上一页