P5718 【深基4.例2】找最小值

一、题目理解

给出 n 个非负整数,要求找出其中的最小值并输出。

输入要求:

  • 第一行:一个正整数 n(数字个数)

  • 第二行:n 个非负整数,用空格隔开

输出要求:

  • 输出一个非负整数,即这 n 个数中的最小值

数据范围:

  • n ≤ 100

  • 0 ≤ a_i ≤ 1000

数据规模很小,直接遍历一遍即可,不需要排序。


二、核心思想:打擂台法

2.1 什么是打擂台法?

想象一个比武招亲的擂台赛:

  • 擂台上先站着一个“擂主”(当前最小值)。

  • 下面的人(输入的数字)一个个上台挑战。

  • 如果挑战者比擂主更小,挑战者就打败擂主,成为新的擂主。

  • 如果挑战者比擂主大,挑战失败,擂主不变。

  • 所有人挑战完毕后,站在擂台上的就是最强(最小)的那个。

三、程序执行流程逐步解析

下面按照程序实际执行的顺序,逐步讲解每一步在做什么。所有代码片段在文末统一给出,这里只讲逻辑。

【第 1 步】程序开始

程序从主函数开始执行。首先需要准备两个变量:

  • 一个用来存放数字的个数,记为 n。

  • 一个用来存放当前的最小值,记为 minl。

【第 2 步】初始化最小值变量

将 minl 初始化为 9999。

为什么初始值设为 9999?

题目保证 0 ≤ aᵢ ≤ 1000,也就是说所有输入的数字最大不超过 1000。

  • 如果把 minl 初始化为 9999,那么第一个读入的数 x 一定满足 x < 9999(因为 x 最大才 1000)。

  • 所以第一个数一定会成功地成为新的 minl,这样 minl 就不会停留在初始值 9999 上,而是被真实输入的数字替换。

反例: 如果把 minl 初始化为 0,而输入全是正数(比如 5 7 4 2 6),那么“x < minl”永远不成立(因为 x 都大于 0),最后输出的就是错误的 0。

 

【第 3 步】读入数字个数 n

从输入流中读取一个整数,存入 n。

以样例为例,此时 n = 5。

【第 4 步】循环读入并比较

这是整个程序的核心部分。使用一个循环,循环变量 i 从 1 开始,每次加 1,直到 i 大于 n 时停止。因此循环体会执行 n 次,正好对应 n 个数字。

(1)读入一个数字

在循环体内定义一个临时变量 x,用来存放当前读入的数字。每次从输入流中读取下一个整数,遇到空格或换行自动分隔。

以样例为例:

  • 第一次循环读入 5

  • 第二次循环读入 7

  • 第三次循环读入 4

  • 第四次循环读入 2

  • 第五次循环读入 6

(2)核心比较:打擂台

判断当前读入的数 x 是否比当前擂主 minl 更小。

  • 如果成立,让 x 成为新的擂主(即把 minl 更新为 x)。

  • 如果不成立,说明 x 比当前最小值大(或相等),擂主不变。

(3)循环结束后

循环结束后,minl 就是所有输入数字中的最小值。

【第 5 步】输出结果

把最终的最小值 minl 输出到屏幕,并换行。

 

#include<bits/stdc++.h>          // 万能头文件
using namespace std;
int main(){
    //最值问题:最大值 最小值
    int n, minl = 9999;           // n:数字个数  minl:当前最小值(初始设为比所有输入都大的数)
    cin >> n;                     // 读入数字个数
    for(int i = 1; i <= n; i++){  // 循环 n 次
        int x;                    // x:当前读入的数
        cin >> x;                 // 读入一个数
        if(x < minl) minl = x;    // 如果当前数比擂主小,就更新擂主
    }
    cout << minl << endl;         // 输出最终的最小值
    return 0;
}

 

posted @ 2026-09-17 15:02  乐意丘  阅读(9)  评论(0)    收藏  举报