给定 M 行 N 列的整数矩阵 A,如果 A 的非边界元素 A[i][j] 大于相邻的上下左右 4 个元素,那么就称元素 A[i][j] 是矩阵的局部极大值。本题要求给定矩阵的全部局部极大值及其所在的位置。
输入格式:
输入在第一行中给出矩阵 A 的行数 M 和列数 N(3 ≤ M,N ≤ 20);最后 M 行,每行给出 A 在该行的 N 个元素的值。数字间以空格分隔。
输出格式:
每行按照 “元素值 行号 列号” 的格式输出一个局部极大值,其中行、列编号从 1 开始。要求按照行号递增输出;若同行有超过 1 个局部极大值,则该行按列号递增输出。若没有局部极大值,则输出 “None 总行数 总列数”。
输入样例1:
4 5
1 1 1 1 1
1 3 9 3 1
1 5 3 5 1
1 1 1 1 1
输出样例1:
9 2 3
5 3 2
5 3 4
输入样例2:
3 5
1 1 1 1 1
9 3 9 9 1
1 5 3 5 1
输出样例2:
None 3 5
来源:
来源:PTA | 程序设计类实验辅助教学平台
链接:https://pintia.cn/problem-sets/13/exam/problems/514
提交:
题解:
#include<stdio.h>
int main(void) {
int M, N;
scanf("%d %d", &M, &N);
int matrix[20][20];
for (int i = 0; i < M; i++) {
for (int j = 0; j < N; j++) {
scanf("%d", &matrix[i][j]);
}
}
// 记录是否存在局部最大值:[0]不存在 [1]存在
int localMax = 0;
// 不检测边界元素,即第一行、第一列、最后一行和最后一列
for (int i = 1; i < M - 1; i++) {
for (int j = 1; j < N - 1; j++) {
// 满足局部最大值条件
if (matrix[i][j] > matrix[i][j - 1] && matrix[i][j] > matrix[i][j + 1] && matrix[i][j] > matrix[i - 1][j] && matrix[i][j] > matrix[i + 1][j]) {
localMax = 1;
printf("%d %d %d\n", matrix[i][j], i + 1, j + 1);
}
}
}
// 不存在局部最大值
if (localMax == 0) {
printf("None %d %d", M, N);
}
return 0;
}