写在前面:
在高铁上无skr做,只能刷题解闷,,
虽然早上五点半就起了,但还是低估了在路上的时间,而且也低估了车站里的人流量,导致距离发车还有十分钟的时候我还在排队取票,然后只能豁出老脸走到队首问那个老哥我可不可以先取票,然后成功取票在发车前三分钟苟上了车【捂脸
回到正题,这道题和我很合(也可能是因为太简单?),一遍AC~
题目:
- 鞍点
单点时限: 2.0 sec
内存限制: 256 MB
寻找矩阵中的鞍点:在矩阵中可能有这样一个数字,它在自己的行中是最大的,但是在自己所处的列中又是最小的,我们把这样的元素称为鞍点。一个矩阵中可能没有鞍点,也可能有多个鞍点。输入一个 5×5 的矩阵,寻找该矩阵中的所有鞍点并按照它们在矩阵中的位置(行,列)输出。
输入格式
第 1 行:一个整数 T (1≤T≤10) 为问题数。
接下来共 5×T 行整数,其中每组测试数据有 5 行,分别是该矩阵的 5 行元素。
每行 5 个整数,整数之间由空格分开。(每个元素为 1 -100 之间的整数。)
输出格式
对于每个问题,输出一行问题的编号(0 开始编号,格式:case #0: 等)。
然后每一行输出由一个空格分隔的两个整数,表示一个鞍点所在的行号和列号(行号、列号从 0 开始计数)。如有两个以上鞍点,按照行号由小到大排列;行号相同时,按照列号由小到大排序。如没有鞍点,则输出一行-1 -1。
样例
input
3
4 3 6 5 8
2 1 7 6 7
1 2 5 3 4
4 3 8 9 10
1 1 9 8 2
1 6 7 8 1
1 9 1 1 9
1 1 1 7 1
1 23 1 1 1
1 1 1 24 1
10 20 11 8 9
1 20 12 11 10
3 30 15 21 21
8 20 20 3 12
9 50 52 70 61
output
case #0:
2 2
case #1:
-1 -1
case #2:
0 1
1 1
3 1
思路:
每个case中:
- 一个二维数组存矩阵;
- 两个一维数组分别存每行的最大值和每列的最小值;
- 一个布尔变量flag代表有无鞍点(初始化为false)
如果某行最大值==某列的最小值,则存在鞍点,则令flag=true,并输出该行行标、该列列标。
若没有鞍点,则循环结束后的flag==false,则输出 -1 -1。
代码:
#include<iostream>
#include<stdio.h>
using namespace std;
int main<