1257: 【基础】马鞍数

题目描述

求一个n×m数阵中的马鞍数,输出它的位置。所谓马鞍数,是指在行上最小而在列上最大的数。
如下: n=5 m=5
5 6 7 8 9
4 5 6 7 8
3 4 5 2 1
2 3 4 9 0
1 2 5 4 8
则1行1列上的数就是马鞍数。

输入

共n+1行,第一行: n m (n,m<10)

第2到n+1行:每行m个整数

输出

输出若干行:如果存在马鞍数,则输出所有马鞍数,每行一个,为行和列以及马鞍数,马鞍数按照读入的顺序输出,也就是说,如果有多组马鞍数,先读入的先输出。

如果不存在马鞍数,则输出'not exist'。

样例输入
9 8
9 8 7 6 5 4 3 2
8 8 9 9 9 9 9 9
3 7 7 6 5 4 2 1
8 8 3 2 1 7 3 2
7 5 3 2 9 1 3 2
6 3 2 1 9 3 1 3
8 2 1 3 5 8 9 1
1 3 2 1 3 5 6 8
9 3 1 2 3 4 5 8
样例输出
2 2 8

使用万能头文件和预编译宏的简化代码

#include 
#define N 100
#define M 100
using namespace std;

int main() {
    int n, m;
    int mat[N][M], row_min[N], col_max[M];
    
    // 输入矩阵
    cin >> n >> m;
    for(int i=0; i> mat[i][j];
    
    // 计算每行最小值
    for(int i=0; i col_max[j])
                col_max[j] = mat[i][j];
    }
    
    // 查找马鞍数
    bool found = false;
    for(int i=0; i

优化说明:

  1. 全局数组定义

    • 使用全局数组a[sz][sz]存储矩阵

    • rmincmax也定义为全局数组

  2. 变量简化

    • 矩阵命名为a(简洁)

    • 行最小值数组命名为rmin(row min)

    • 列最大值数组命名为cmax(column max)

  3. 算法优化

    • 使用min()max()函数简化极值计算

    • 保持O(n×m)的时间复杂度

  4. 输出格式

    • 行号列号从1开始输出

    • 使用布尔标记exist判断是否存在解

注意事项:

  • 全局数组自动初始化为0

  • sz定义为100满足题目n,m<10的要求

  • 使用万能头文件包含所有必要库

这个版本在保持算法效率的同时,代码更加简洁清晰,完全符合题目要求的约束条件。

你可能感兴趣的:(java,算法,c++)