top1编程
← 返回题目
题解

最小的元素

1 条题解

  • 0
    @ 2026-8-5 14:24:32

    解题思路

    题目要我们输出每一行的最小值,一行一个。

    1. 一行一行处理

    读入方阵的时候,不需要把整个方阵都存下来,可以读一行、找一行、输出一行。这样更省内存,思路也更清楚。

    2. 怎么找一行里的最小值?

    和“打擂台”一样:先把这一行的最小值设成一个很大的数(比如 1001,因为题目说数字不大于 1000),然后这一行的每个数都来和它比,谁小谁当擂主。这一行读完,擂主就是这一行的最小值。

    3. 对照样例

    第 1 行是 9 10 5 100,最小是 5;第 2 行是 10 200 7 7,最小是 7;第 3 行是 12 360 89 11,最小是 11。所以输出:

    5
    7
    11
    

    参考代码

    #include <iostream>
    using namespace std;
    int main(){
        // P4527 最小的元素:一行一行的读,找每一行的最小值并输出
        int m, n;
        cin >> m >> n;
        for(int i=1;i<=m;i++){
            int mn = 1001; // 数字不大于1000,初值设一个足够大的数
            for(int j=1;j<=n;j++){
                int x;
                cin >> x;
                if(x < mn) mn = x; // 更新这一行的最小值
            }
            cout << mn << endl; // 输出这一行的最小值
        }
        return 0;
    }
    

    复杂度分析

    方阵一共有 m 行、每行 n 个数,也就是 m×n 个数。每个数被读进来并比较一次,所以时间复杂度是 O(m×n)。题目说数字不大于 1000,规模不大,很快就能算完。

    程序没有开数组,只用了几个变量,空间复杂度是 O(1)。

    • 1