7-1 求二维数组的鞍点 (10 分)

一个二维数组中,如果一个元素是其所在行的最大值,是其所在列的最小值,则称这个元素为鞍点。求一个二维数组中的所有鞍点。

输入格式:

输入两个整数n,m,代表二维数组的行数和列数。 接着输入n行,每行m个整数。

输出格式:

如果有鞍点,输出行下标和列下标,以空格分隔。 如果没有鞍点,则输出一个0。

输入样例:

2 3
1 4 3
5 6 7

结尾无空行

输出样例:

在这里给出相应的输出。例如:

0 1

结尾无空行

import java.util.Scanner;


public class Main {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        int n=scanner.nextInt();
        int m=scanner.nextInt();
        int[][] a = new int[n][m];
        for(int i=0;i<n;i++){
            for(int j=0;j<m;j++){
                a[i][j]=scanner.nextInt();
            }
        }
        andian.Andian(a);
    }
}

class andian {
    static int max_x;
    static int max_y;
    static void Andian(int[][] a) {
        int p = 0, q = 0, o = 0;	
        for(int i=0; i<=a.length-1; i++) {	
            o = a[i][0];
       
### 二维数组鞍点算法实现 #### 鞍点定义 在二维数组中,鞍点是指某个元素在其所在行中是最大的,在其所在列中是最小的。需要注意的是,鞍点可能存在,也可能唯一存在。 --- #### 实现逻辑1. **遍历每一行**:找到当前行的最大值及其对应的列索引。 2. **验证条件**:将该最大值与其对应列的所有其他元素进行比较,如果它是这一列中的最小值,则它是一个鞍点。 3. **返回结果**:一旦发现鞍点即可停止搜索并输出结果;若遍历结束后未找到任何符合条件的元素,则说明该二维数组鞍点。 以下是基于 C 语言的具体实现: ```c #include <stdio.h> #define ROWS 4 #define COLS 5 int main() { int a[ROWS][COLS]; int i, j, maxj; int flag; // 输入二维数组 printf("请输入一个 %d 行 %d 列的二维数组:\n", ROWS, COLS); for (i = 0; i < ROWS; i++) { for (j = 0; j < COLS; j++) { scanf("%d", &a[i][j]); } } // 查找鞍点 for (i = 0; i < ROWS; i++) { // 找到第 i 行的最大值及其列索引 maxj = 0; for (j = 1; j < COLS; j++) { if (a[i][j] > a[i][maxj]) { maxj = j; } } // 检查该最大值是否为其所在列的最小值 flag = 1; for (int k = 0; k < ROWS; k++) { if (a[k][maxj] < a[i][maxj]) { flag = 0; break; } } // 如果满足条件,则找到了鞍点 if (flag) { printf("鞍点位于 [%d][%d],值为:%d\n", i, maxj, a[i][maxj]); return 0; } } // 若遍历结束仍未找到鞍点 printf("该二维数组存在鞍点。\n"); return 0; } ``` --- #### 关键点解释 1. **行最大值计算**: 使用嵌套循环逐行扫描,找出每行的最大值以及它的列索引 `maxj`[^1]。 2. **列最小值验证**: 对于每个候选鞍点(即行最大值),进一步检查它是否也是其所在列的最小值。通过再次遍历整个列来完成此操作[^2]。 3. **提前终止优化**: 当检测到第一个鞍点时立即退出程序,因为题目假设鞍点具有唯一性[^3]。 4. **边界情况处理**: - 数组为空或尺寸合法的情况需额外考虑; - 如果没有任何元素符合鞍点定义,则应明确告知用户“存在鞍点”。 --- #### 示例运行 假设有如下输入数据: ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ``` 程序会依次检查各行的最大值,并最终判定是否存在鞍点。对于以上例子,由于所有数值严格递增,因此会有任何鞍点被识别出来。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值