#9984. 2026/7/30/文翰GOC小组(最值以及最值位置)
2026/7/30/文翰GOC小组(最值以及最值位置)
GOC 循环求最值及位置
一、核心目标
在循环输入数字的过程中,同时完成三个核心任务:
- 找出序列中的最大值与最小值
- 记录最大值、最小值分别是第几个输入的(位置序号)
二、变量初始化铁则(必背易错点)
这是求最值问题的基础,属于高频考点,绝对不能写错:
- 最大值变量:必须初始赋值为一个极小值(示例中为
-1000000) ✅ 原理:保证第一个输入的数一定能触发更新,避免初始值比所有输入数都大,导致结果完全错误 ❌ 禁忌:不能随意初始化为0,如果输入全是负数,结果会完全失效 - 最小值变量:必须初始赋值为一个极大值(示例中为
1000000) ✅ 原理:保证第一个输入的数一定能触发更新,避免初始值比所有输入数都小 - 额外定义
mai、mii两个变量,专门存储最大值、最小值对应的位置序号
三、GOC 核心代码逻辑
int main(){
int a;
// 最值初始化:最大值赋极小值,最小值赋极大值
int ma = -1000000, mi = 1000000;
int mai, mii; // 分别记录最大值、最小值的位置
// 循环输入10个数,i 代表当前是第几个数(位置序号)
for(int i = 1; i <= 10; i++){
cin >> a;
// 更新最大值及对应位置
if(a > ma){
ma = a;
mai = i;
}
// 更新最小值及对应位置
if(a < mi){
mi = a;
mii = i;
}
}
p.text(ma); // GOC环境中使用 p.text() 输出结果
return 0;
}
四、重中之重:符号决定位置(高频考点)
当序列里出现多个相同的最大值/最小值时,比较符号的细微差别,会直接决定记录的是第一个还是最后一个出现的位置:
| 判断写法 | 最大值场景效果 | 最小值场景效果 |
|---|---|---|
a > ma |
仅严格更大时才更新 → 保留最靠前的最大值位置 | a < mi → 保留最靠前的最小值位置 |
a >= ma |
相等也会更新 → 保留最靠后的最大值位置 | a <= mi → 保留最靠后的最小值位置 |
举例说明:输入顺序为 5、3、5、2、5
- 使用
a > ma:最大值位置为 1(记录第一个5的位置) - 使用
a >= ma:最大值位置为 5(记录最后一个5的位置)
五、高频易错点提醒
- 只更新数值,忘记同步更新位置:修改了
ma/mi的值,却漏掉了mai/mii的赋值 - 初始化数值写反:最大值赋了极大值、最小值赋了极小值,导致最值永远不会更新
- 比较符号用错:题目要求“第一个出现的位置”却错用
>=,要求“最后一个出现的位置”却错用> - 位置序号混淆:循环变量
i从1开始,对应日常“第几个”的计数习惯,不要和数组下标混淆