要求:鞍点为同一行的最大值和同一列的最小值
2:分析,由于鞍点的特性,假如这个数阵每行每列的数字均不相等,则只可能存在一个鞍点,这是由于若数互不相等,若存在一个鞍点,则其他行的最大值肯定大于等于这个鞍点所在行的最大值,就会大于鞍点行所在行的其他列的数字,就不可能为最小列,因此只可能存在一个鞍点
所以若存在多个鞍点则同一行或同一列存在相等的数字
如
1 4 1 4
5 6 7 8
9 10 11 12(有两个鞍点)
或
1 4 1 4
1 4 1 4
5 6 5 6(有四个鞍点)
int main()//鞍点查找,鞍点:行最大,列最小
{
int row,col;
scanf("%d %d",&row,&col);
int arr[row][col]; int maxnum[row];int minnum[col];
int maxcol=0;int minrow=0;
int i=0;int j=0;int k=0;
for(int i=0;i<row;i++)
{
for(int j=0;j<col;j++)
{
scanf("%d",&arr[i][j]);
}
}//赋值
for(int i=0;i<row;i++)
{
int max=arr[i][0];
for(int j=0;j<col;j++)
{
if(arr[i][j]>=max){
maxnum[k]=arr[i][j];
}//得到每一行的最大值
}
k++;
}
k=0;//重置k的值
for(int i=0;i<col;i++)
{
int min=arr[0][i];
for(int j=0;j<row;j++)
{
if(arr[j][i]<=min){
minnum[k]=arr[j][i];
}
}
k++;
}//得到每一列的最小值
for(int i=0;i<row;i++)
{
for(int j=0;j<col;j++)
{
if(arr[i][j]==maxnum[i]&&arr[i][j]==minnum[j]){//maxnum[i]表示第i行的最大,minnum[j]表示第j列的最小
printf("鞍点是(%d,%d)",i+1,j+1);//i+1,j+1是为了方便理解含义写成这个样子,便于检验正误
printf("\n");
}
}
}
return 0;
}
1,注意第二次获得列最小时要把i,j的值倒过来,或者直接用英文缩写声明变量,防止搞错