top1编程
← 返回题目
题解

求n个整数的最小值

1 条题解

  • 0
    @ 2026-8-4 16:08:45

    解题思路

    求 n 个整数的最小值,和"打擂台找最大值"是同一个思路,只是把"更大"改成"更小":

    1. 先读入第一个数当擂主(当前最小值 mn);
    2. 循环读入剩下的数,每个数都来挑战;
    3. 如果这个数比当前最小值还小,就更新最小值;
    4. 所有数读完后,mn 就是最小值。

    写代码时最容易犯的错是把"小于"写成"大于",那样求出来的就是最大值了。找最小值一定要用 x < mn 来判断。

    另外注意:虽然题目没有直接给出数值范围,但这类题通常是 int 范围内的整数,用 int 类型足够。

    参考代码

    #include <iostream>
    using namespace std;
    
    int main() {
        int n;              // n:整数的个数
        cin >> n;           // 读入个数 n
        int mn;             // mn:当前的最小值(擂主)
        cin >> mn;          // 先读入第一个数,让它当擂主
        for (int i = 2; i <= n; i++) {   // 从第二个数开始挑战
            int x;          // x:当前读入的一个整数
            cin >> x;       // 读入这个数
            if (x < mn) {   // 如果它比当前最小值还小
                mn = x;     // 更新最小值
            }
        }
        cout << mn << endl; // 输出最小值
        return 0;
    }
    

    复杂度分析

    循环 n-1 次,每次做一次比较,时间复杂度是 O(n),其中 n 是输入的整数个数。只用了 n、mn、i、x 几个固定变量,空间复杂度 O(1)。

    • 1