找出二维数组中的鞍点,即该位置上的元素在该行上最大,在该列中最小,也可能没有鞍点。
解析:
找出在一行中的最大值,确定最大值所在的列,再求出在该列中的最小值所在的行数,比较行是否相等,判断是否为鞍点。
代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n,m,i,j;
printf("请输入行:\n");
scanf("%d",&n);
printf("请输入列:\n");
scanf("%d",&m);
int a[n][m];
for (i=0;i<n;i++){
for (j=0;j<m;j++){
scanf("%d",&a[i][j]);
}
}
int max_p,min_l,maxj,mini;
int ispoint=0,k;
for (i=0;i<n;i++){
max_p=a[i][0];
maxj=0;//列号
//找到第i行中最大的值
for (j=0;j<m;j++){
if(a[i][j]>max_p){
max_p=a[i][j];
maxj=j;
}
}
//该列号下的最小值
min_l=a[0][maxj];
mini=0;
for (k=0;k<n;k++){
if(min_l>a[k][maxj]){
min_l=a[k][maxj];
mini=k;//最小值的行号
}
}
if(mini==i){
printf("a[%d][%d]=%d\n",mini,maxj,a[mini][maxj]);
ispoint=1;
}
}
if(!ispoint)
printf("None");
return 0;
}