1047.寻找鞍点

本文最后更新于 2023年9月16日 早上

NOI CCF 1047. 寻找鞍点

题目描述
给定一个5*5的矩阵,每行只有一个最大值,每列只有一个最小值,寻找这个矩阵的鞍点。鞍点指的是矩阵中的一个元素,它是所在行的最大值,并且是所在列的最小值。
例如:在下面的例子中(第4行第1列的元素就是鞍点,值为8 )。
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
输入
输入包含一个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

题目分析

  1. 输入用常规循环
  2. 用简单算法测最大最小,保存特殊值及其位置
  3. 输出检测特殊值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include<iostream>
using namespace std;

int a[8][8], c[8][8];

int main() {

for (int i = 1; i < 6; i++) {
for (int j = 1; j < 6; j++) {
cin >> a[j][i];
}
}

int max, maxn = 0;
for (int i = 1; i < 6; i++) {
max = 0;
for (int j = 1; j < 6; j++) {
if (a[j][i] > max) {
max = a[j][i];
maxn = j;
}
}
c[maxn][i]++;
}

int min, minn = 0;
for (int i = 1; i < 6; i++) {
min = 100000;
for (int j = 1; j < 6; j++) {
if (a[i][j] < min) {
min = a[i][j];
minn = j;
}
}
c[i][minn]++;
}

int ok = 1;
for (int i = 1; i < 6; i++) {
for (int j = 1; j < 6; j++) {
if (c[i][j] == 2) {
cout << j << " " << i << " " << a[i][j];
ok--;
}
}
}
if (ok)cout << "not found";

return 0;
}

1047.寻找鞍点
https://www.harkerhand.online/CCF-NOI/1047/
作者
harkerhand
发布于
2020年4月11日
更新于
2023年9月16日
许可协议