top1编程
← 返回题目
题解

【入门】郭远摘苹果

1 条题解

  • 0
    @ 2026-7-31 11:45:45

    解题思路

    题目问郭远一路摘苹果的过程中,身上最多带过多少苹果、最少带过多少,求这两个数的差。

    因为郭远每到一棵树就丢掉身上的、换成这棵树的苹果,所以整个过程他身上的苹果数就是每棵树的苹果数。问题就变成:求整个果园苹果数的最大值减最小值。

    思路:

    1. 把 m 行 n 列的苹果数读进二维数组
    2. 先假设第一个数是最大值也是最小值
    3. 遍历所有苹果数:遇到更大的更新最大值,遇到更小的更新最小值
    4. 输出最大值减最小值

    这种方法叫打擂台:mx 是最大值擂主,mi 是最小值擂主,每个苹果数都来比一比。

    参考代码

    #include <iostream>
    using namespace std;
    
    int main() {
        int a[100][100];
        int m, n;
        cin >> m >> n;
    
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                cin >> a[i][j];
            }
        }
    
        int mx = a[0][0];
        int mi = a[0][0];
    
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                if (a[i][j] > mx) mx = a[i][j];
                if (a[i][j] < mi) mi = a[i][j];
            }
        }
    
        cout << mx - mi << endl;
        return 0;
    }
    

    复杂度分析

    • 时间复杂度:O(M×N),遍历整个矩阵
    • 空间复杂度:O(M×N),二维数组存苹果数
    • 1