#9984. 2026/7/30/文翰GOC小组(最值以及最值位置)

2026/7/30/文翰GOC小组(最值以及最值位置)

GOC 循环求最值及位置


一、核心目标

在循环输入数字的过程中,同时完成三个核心任务:

  1. 找出序列中的最大值最小值
  2. 记录最大值、最小值分别是第几个输入的(位置序号)

二、变量初始化铁则(必背易错点)

这是求最值问题的基础,属于高频考点,绝对不能写错:

  • 最大值变量:必须初始赋值为一个极小值(示例中为 -1000000) ✅ 原理:保证第一个输入的数一定能触发更新,避免初始值比所有输入数都大,导致结果完全错误 ❌ 禁忌:不能随意初始化为0,如果输入全是负数,结果会完全失效
  • 最小值变量:必须初始赋值为一个极大值(示例中为 1000000) ✅ 原理:保证第一个输入的数一定能触发更新,避免初始值比所有输入数都小
  • 额外定义 maimii 两个变量,专门存储最大值、最小值对应的位置序号

三、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的位置)

五、高频易错点提醒

  1. 只更新数值,忘记同步更新位置:修改了 ma/mi 的值,却漏掉了 mai/mii 的赋值
  2. 初始化数值写反:最大值赋了极大值、最小值赋了极小值,导致最值永远不会更新
  3. 比较符号用错:题目要求“第一个出现的位置”却错用 >=,要求“最后一个出现的位置”却错用 >
  4. 位置序号混淆:循环变量 i 从1开始,对应日常“第几个”的计数习惯,不要和数组下标混淆