#include<stdio.h>
#define x 3 //二维数组的行数
#define y 4 //二维数组的列数
int main()
{
int i,j,max,maxj,min,flag=1; //定义变量
int arr[x][y];
printf("请输入一个%d*%d数组\n",x,y);
for(i=0;i<x;i++)
for(j=0;j<y;j++)
scanf("%d",&arr[i][j]); //初始化二维数组
for(i=0;i<x;i++)
{
max=arr[i][0]; //设一行中第一个为该行的最大值
maxj=0; //初始化
for(j=0;j<y;j++)
if(arr[i][j]>max)
{max=arr[i][j];maxj=j;}//找出一行中最大的数字并找出其列号下标
min=arr[i][maxj]; //设一行中最大值为其所在列最小值
for(j=0;j<x;j++)
if(arr[j][maxj]<min)//判断是否满足为一列中最小值
break;
if(j>=x)
{
printf("二维数组的鞍点为arr[%d][%d]=%d\n",i,maxj,max);
flag=0;//作为判断有鞍点的依据
}
}
if(flag) //整个二维数组没有鞍点
printf("该二维数组没有鞍点\n");
return 0;
}
运行示例:
鞍点的定义:
该位置的元素在该行上最大、在该列上最小。
解题思路:
设一行中第一个为该行的最大值,找出一行中最大的数字并找出其列号下标,设一行中最大值为其所在列最小值,判断该数是否满足为一列中最小值,满足则为鞍点,不满足就不是鞍点。
版权声明:本文为m0_63699649原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。