输入:第一行有2个正整数n和m,表示二维数组的高度和宽度,保证n和m均不超过50。
之后的n行每行有m个用空格隔开的整数,表示二维数组对应位置的值。
输出:当鞍点存在时,将每个鞍点的信息在一行内输出,输出三个用空格隔开的整数,分别为鞍点元素的值以及其所在的行号和列号,有多个鞍点时,按照元素读入的顺序进行输出。当鞍点不存在时,在一行内输出“NO”。
#include<stdio.h>
int main()
{
int s[50][50];
int n, m,count=0;
scanf("%d%d", &n, &m);
for (int i = 0; i < n; i++) //输入数组
{
for (int j = 0; j < m; j++)
{
scanf("%d", &s[i][j]);
}
}for (int i = 0, a = 0; i < n; i++)
{
int j = 0, max = s[i][0];
for (; j < m; j++)
{
if (max <= s[i][j]) //求该行的最大值
{
max = s[i][j];
a = j; //记录max的列下标
}
}
int k = 0, min = s[k][a]; //求max所在列的最小值
for (; k < n; k++)
{
if (min >= s[k][a]) {
min = s[k][a];
}
}
switch (max == min) //判断max与min是否相等
{
case 1:printf("%d %d %d\n", max, i, a); break;
case 0:count += 1; break;
}
}
if (count == n)printf("NO"); //当不相等的次数等于行的次数时,没有鞍点
return 0;
}
欢迎批评指正。