作业比赛编号 : 3070 - 【CSPtch-Jing】循环3 | 求最值
求最值
学会在一堆数字中,找出最大的数和最小的数。一、什么是“最值”?
“最值”就是一组数字中最特别的数字:最大的叫最大值,最小的叫最小值。
最大值
像在比赛中找“跳得最远”的同学,要一直保留目前见过的最大数字。
最小值
像在一排书包中找“最轻”的书包,要一直保留目前见过的最小数字。
二、找最值的四个步骤
- 1
先读入第一个数,把它同时当作目前的最大值和最小值。 - 2
再读入下一个数,和目前的最大值、最小值比较。 - 3
如果它更大,就更新最大值;如果它更小,就更新最小值。 - 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_MAX | int 能表示的最大值 | int |
INT_MIN | int 能表示的最小值 | int |
LLONG_MAX | long long 能表示的最大值 | long long |
LLONG_MIN | long long 能表示的最小值 | long long |
UINT_MAX | unsigned 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;
}
小提醒:四年级学习求最值时,优先掌握“先读第一个数,再逐个比较”的方法。边界常量先知道它们的作用,遇到需要时再使用。
