找出一个二维数组中的鞍点的流程图_【题解二维数组】1122:计算鞍点

28a4667a77524f65e754eb01392f6195.png 5db560303e8cba258e355396a66e6bf2.png1122:计算鞍点 时间限制: 1000 ms    内存限制: 65536 KB

【题目描述】

给定一个5×5的矩阵,每行只有一个最大值,每列只有一个最小值,寻找这个矩阵的鞍点。鞍点指的是矩阵中的一个元素,它是所在行的最大值,并且是所在列的最小值。

例如:在下面的例子中(第4行第1列的元素就是鞍点,值为8 )。

fbee15d57259eb5dd3551ab699d06404.png

【输入】

输入包含一个5行5列的矩阵。

【输出】

如果存在鞍点,输出鞍点所在的行、列及其值,如果不存在,输出"not found"。

【输入样例】

11 3 5 6 9

12 4 7 8 10

10 5 6 9 11

8 6 4 7 2

15 10 11 20 25

【输出样例】

4 1 8

说明

主要考查二维数组,以及关于《鞍点》的知识。

题目概述

遍历一个5×5的矩阵,找鞍点,根据鞍点是否存在输出相应的结果。

本题的有一个鲜为人知的知识点——鞍点。一个5×5的矩阵,可能存在一个鞍点还是多个呢?

鞍点的概念

鞍点的鞍,其意是马鞍。马鞍是人们在马的背部安装一个座椅。其形状如下图:

5a850efceb60aa28ff1c44640cbee449.png

550f88e02646ba6ead432f214c4153fe.png

上图是一个真实的马鞍。将马鞍的长度作为横向,高度作为纵向,可以得到下图。

22fac062176c0075ee113f3dd458b456.png

上图的表情就是该马鞍的鞍点,该位置在横向上最低,在纵向上最高。

也说明:一个矩阵中,每一行和每一列的数字不能相等。

思路分析

对于5×5的矩阵,它的行号和列号都是从1开始,所以数组元素的下标从1开始使用比较方便。

声明一个最大值nMax和一个最小值nMin变量,用于存储矩阵中的坐标。其中nMax用于存储当前行最大值的列号,nMin用于存储当前列最小值的行号。

接着使用循环嵌套输入矩阵数据。

代码如下:

5d437c39781dd82854e174bd3fff18ff.png

开始找鞍点。使用循环嵌套遍历每行每列,找出一行中最大值的列号(下标)存储在nMax中。此时a[i][nMax]便是第i行的最大值。

代码如下:

6b6fd3a9d8c98331143d4a08fbcb3a8c.png

代码中,nMax赋值为1,表示假设第i行1列(a[i][1])的值最大,所以循环中,变量j的取值是2~5。注意变量nMax存储的不是最大值,而是最大值的列号。

上面找出第i行最大值的列号nMax,接着遍历nMax列,找出该列中的最小值,并把最小值的行号存储在nMin中。

代码如下:

03959cc1936280b424bfdd5299f31507.png

代码中,nMin赋值为1,表示假设第1行nMax列(a[1][nMax])的值最小,所以循环中,变量k的取值是2~5。注意变量nMin存储的不是最小值,而是最小值的行号。

因为是在第nMax列中找最小值,所以数组元素的列号都是nMax。

此时,已找出第i行中的最大值a[i][nMax],也找出第nMax列的最小值a[nMin][nMax],如果i等于nMin,说明最大值与最小值是同一坐标,表示找到鞍点。根据要求输出即可。

同时,注意题中指出:如果不存在鞍点,则输出"not found"。不能在循环嵌套中输出,因为循环嵌套主要用于寻找鞍点,会循环多次,不可能循环一次找不到鞍点就输出一次"not found",只有遍历结束后,确定找不到鞍点才能输出。而判断是否找到鞍点,可以声明一个标记变量来辅助。

代码如下:

b3f9c1761c7ee3f69ffb88f999da5855.png

最后就是对标记变量flag的判断,如果flag还是一开始初始化的值,表示找不到鞍点,则输出字符串"not found"。

代码如下:

f590dc89e59b5180410c59c04ba0a13c.png

数据类型:数据类型较为简单,注意数组的长度即可。

参考代码 - C++

d9950e907a848809be0230d1fbe146cd.png

参考代码下载链接

https://pan.baidu.com/s/1gMemHC2OvE3i03DgmAHGnQ

提取码: dsbc

END

注:题目来源于网络,转载于《信息学奥赛一本通(C++版)在线评测系统》,点击下方的【阅读原文】即可打开该题的链接。

题解属于本微信公众号【大神编程】原创。

25a47f43b726603847eb8f35363c2d2c.gif

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值