系列文章目录
前言
《数据结构基础》c语言版 第2版,Ellis Horowitz著,朱仲涛译
2.9节,page78,习题2
一、题目描述
m*n矩阵的鞍点定义为a[i][j]既是第i行的最大值又是第j行的最小值
二、c++代码
代码如下:
#include<iostream>
using namespace std;
int main() {
int a[3][4] = {{3, 2, 3, 5},
{8, 7, 10, 4},
{12, 11, 14, 29}};
int m = sizeof(a) / sizeof(a[0]); //行
int n = sizeof(a[0]) / sizeof(a[0][0]); //列
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
printf("%4d", a[i][j]);
}
printf("\n");
}
int row_max_value[m];
int col_min_value[n];
int flag=0;
for(int i=0;i<m;i++)
{
row_max_value[i]=a[i][0];
for(int j=1;j<n;j++)
{
if(a[i][j]>row_max_value[i])
{
row_max_value[i]=a[i][j];
}
}
}
for(int j=0;j<n;j++)
{
col_min_value[j]=a[0][j];
for(int i=1;i<m;i++)
{
if(a[i][j]<col_min_value[j])
{
col_min_value[j]=a[i][j];
}
}
}
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
if(a[i][j]==row_max_value[i] && a[i][j]==col_min_value[j])
{
printf("该矩阵的鞍点位于第 %d 行、第 %d 列,值为%d\n",i,j,a[i][j]);
flag++;
}
}
}
if(flag==0)
printf("该矩阵没有鞍点\n");
return 0;
}