1258: 【入门】郭远摘苹果

题目描述

郭远有一天走到了一片苹果林,里面每颗树上都结有不同数目的苹果,郭远身上只能拿同一棵树上的苹果,他每到一棵果树前都会把自己身上的苹果扔掉并摘下他所在树上的苹果并带走(假设郭远会走过每一棵苹果树),问在郭远摘苹果的整个过程中,他身上携带的最多苹果数与最小苹果数的差是多少?

输入

m,n(即苹果林中有果树的行数和列数,0

输出

1个数字(郭远摘苹果的整个过程中,他身上携带的最多苹果数与最小苹果数的差)

样例输入

复制

4 3
2 6 5
1 3 7
5 3 5
1 7 12
样例输出

复制

11

问题分析

题目描述郭远在苹果林中摘苹果的过程:

  1. 苹果林是一个m行n列的矩阵,每个元素代表该果树的苹果数量

  2. 郭远会经过每棵果树(即遍历整个矩阵)

  3. 每到一棵树前,他会扔掉身上现有的苹果,并摘下当前树的所有苹果带走

  4. 需要计算在整个过程中,他携带苹果的最大值与最小值的差

解题思路

  1. 遍历顺序:题目说"会走过每一棵苹果树",但没有指定具体顺序。根据样例,应该是按照输入顺序逐行遍历

  2. 过程模拟

    • 初始化携带苹果数为0

    • 对每个果树,记录当前携带的苹果数(即该果树的苹果数)

    • 记录过程中的最大值和最小值

  3. 计算结果:最大值 - 最小值

代码实现
 

#include 
#define sz 10  // 最大尺寸设为10,因为n,m<=10
using namespace std;

int a[sz][sz];  // 存储苹果树矩阵
int m, n;       // 实际行数和列数

int main() {
    // 输入数据
    cin >> m >> n;
    for(int i=0; i> a[i][j];
    
    // 模拟摘苹果过程
    int max_apple = INT_MIN;  // 记录最大值
    int min_apple = INT_MAX;  // 记录最小值
    
    for(int i=0; i

代码说明

  1. 全局定义

    • 使用#define sz 10定义最大尺寸

    • 全局数组a[sz][sz]存储苹果树矩阵

    • mn存储实际行数和列数

  2. 输入处理

    • 读取m和n

    • 读取m×n的苹果树数据

  3. 过程模拟

    • 初始化max_apple为最小整数,min_apple为最大整数

    • 双重循环遍历每个果树

    • 更新最大值和最小值

  4. 结果输出

    • 计算并输出最大值与最小值的差

复杂度分析

  • 时间复杂度:O(m×n),需要遍历整个矩阵

  • 空间复杂度:O(m×n),存储苹果树矩阵

示例验证

样例输入

4 3
2 6 5
1 3 7
5 3 5
1 7 12

处理过程

  • 遍历所有苹果数:2,6,5,1,3,7,5,3,5,1,7,12

  • 最大值:12

  • 最小值:1

  • 差值:11

输出

11

优化点

  1. 可以不需要存储整个矩阵,边读边计算:

int current;
int max_apple = INT_MIN;
int min_apple = INT_MAX;

cin >> m >> n;
for(int i=0; i> current;
        max_apple = max(max_apple, current);
        min_apple = min(min_apple, current);
    }
}
cout << max_apple - min_apple << endl;
  1. 这样空间复杂度降为O(1),但题目要求使用二维数组,所以保留原方案

最终版本
 

#include 
#define sz 10
using namespace std;

int a[sz][sz], m, n;

int main() {
    cin >> m >> n;
    int max_a = INT_MIN, min_a = INT_MAX;
    
    for(int i=0; i> a[i][j];
            max_a = max(max_a, a[i][j]);
            min_a = min(min_a, a[i][j]);
        }
    
    cout << max_a - min_a << endl;
    return 0;
}

这个版本在读取输入的同时就计算最大值和最小值,既满足了使用二维数组的要求,又提高了效率。

你可能感兴趣的:(算法,c++,开发语言)