//题目:找出一个二维数组的“鞍点”,即该位置上的元素在该行上最大,在该列上最小。也可能没有鞍点。
//
#include "stdio.h"
#include <stdlib.h>
int main()
{
int i,j,k,hang=,lie=;
printf("输入行");
scanf("%d",&hang);
printf("输入列");
scanf("%d",&lie);
printf("请输入该矩阵的元素,行内左至右顺序输入,行间上至下顺序输入,按回车完成一个元素的输入:\n");
int zong=hang*lie; int *a;
a=(int *) malloc (zong * sizeof(int));
printf("请输入 %d 个元素: ", zong);
for (i = ; i < zong; i++)
scanf("%d", &a[i]);
printf("\b \n"); int **data; data = (int **) malloc (hang * sizeof(int *));
for(int j=;j<hang;j++)
{
data[j] = (int *)malloc(lie*sizeof(int));
}
for (int k=,i=;k<hang;k++)
{ for (int j=;j<lie;j++)
{ data[k][j]=a[i];
i++; }
}
free(a); int *rmax;
rmax=(int *) malloc (hang * sizeof(int)); for(k=;k<hang;k++)
{
rmax[k]=;
for(j=;j<lie;j++)
{ if(data[k][j]>=rmax[k])
{
rmax[k]=data[k][j]; }
} }
int*cmin;
cmin=(int *) malloc (lie * sizeof(int)); for(j=;j<lie;j++)
{
cmin[j]=;
for(k=;k<hang;k++)
{
if(k==)
cmin[j]=data[k][j];
if(data[k][j]<=cmin[j])
{
cmin[j]=data[k][j];
}
} } for(j=;j<hang;j++)
for(k=;k<lie;k++)
{
if(rmax[j]==cmin[k])
printf("data[%d][%d]=%d\n",j+,k+,rmax[j]);
}//这里要用到循环比较,下面这样不行 // if(rmax[k]==cmin[j])
// printf("data[%d][%d]=%d\n",k+1,j+1,rmax[k]);
// else
// printf("It is not exist!\n"); for (i=;i<hang;i++)
{
free(data[i]);
}
free(data);
system("pause");
}