top1编程
← 返回题目
题解

最大值

1 条题解

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

    解题思路

    题目要求在一个 m×n 的方阵里找到最大的数,并且输出它所在的行号和列号。

    1. 怎么找最大值?

    用“打擂台”的方法:先让第 1 个数当“擂主”,然后从第 2 个数开始,一个一个和擂主比。谁大,谁就当新的擂主。全部比完,最后的擂主就是最大值。

    2. 还要记住位置

    在更新最大值的时候,同时把这一格的行号和列号记下来。这样最后既知道最大值,又知道它在哪里。

    3. 初值设多少?

    擂主一开始可以设成 -1(题目保证所有数都是正整数,最大是 1000),所以第一次比较一定会更新。

    4. 输出顺序

    第一行输出最大值,第二行输出“行号 列号”,中间用空格隔开。

    5. 对照样例

    样例里最大的数是 360,它位于第 3 行第 2 列,所以输出:

    360
    3 2
    

    参考代码

    #include <iostream>
    using namespace std;
    int main(){
        // P4525 最大值:边读边找最大的数,并记下它所在的行和列
        int m, n;
        cin >> m >> n;
        int mx = -1, r = 1, c = 1; // mx保存最大值,r、c保存行号和列号
        for(int i=1;i<=m;i++){
            for(int j=1;j<=n;j++){
                int x;
                cin >> x;
                if(x > mx){ // 发现更大的数就更新
                    mx = x;
                    r = i;
                    c = j;
                }
            }
        }
        cout << mx << endl;            // 第一行:最大值
        cout << r << " " << c << endl; // 第二行:行号 列号
        return 0;
    }
    

    复杂度分析

    我们要把方阵里所有的数都读一遍并比较,一共有 m×n 个数,所以时间复杂度是 O(m×n)。题目说 3 ≤ m,n ≤ 100,最多 100×100=10000 个数,很快。

    程序只用了几个变量存最大值和它的位置,没有开数组,空间复杂度是 O(1)。

    • 1