求该矩阵的鞍点下标的值。
有一个3×4的矩阵如下
{{-32,8,10,2},
{9,23,-23,-6},
{8,2,-11,7}}
鞍点:指的是在一行中最大的数同时在对应的这一列中也是最大的数。
方法一
找到一行中最大的一个值,然后,再确定这个行最大值的列数,然后再寻找这一列中最大的值,最后比较列最大值是否跟行最大值相等。如果相等,就说明这个数是鞍点,最后输入这个数,及其对应的下标。
#include <stdio.h>
int main(int argc, const char *argv[])
{
int st[3][4]={{-32,8,10,2},\
{9,23,-23,-6},\
{8,2,-11,7}},i,j,max_l,max_h;
for(i=0;i<3;i++)
{
max_l=0;
for(j=0;j<4;j++)
{
if(st[i][max_l]<st[i][j])
max_l=j;//1
}
max_h=0;
for(j=0;j<3;j++)
{
if(st[max_h][max_l]<st[j][max_l])//st[0][1]<st[1][1]
max_h=j;//1 st[1][1]<st[2][1]
}
if(max_h == i)//i=1
printf("%d %d %d\n",st[i][max_l],i,max_l);
}
return 0;
}
方法二
第二种方法就是,分别先找出每一行,每一列中的最大值,最后比较行最大值和列最大值是否相等。相等就输出该鞍点及其对应的下标。
#include <stdio.h>
int main(int argc, const char *argv[])
{
int i=0,j=0;
int str[3][4]={-32,8,10,2,9,23,-23,-6,8,2,-11,7};
int max_h[3]={0};
int max_l[4]={0};
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
{
if(str[i][j]>max_h[i])
{
max_h[i]=str[i][j];
}
}
}
for(j=0;j<4;j++)
{
for(i=0;i<3;i++)
{
if(str[i][j]>max_l[j])
{
max_l[j]=str[i][j];
}
}
}
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
{
if(max_h[i]==max_l[j])
{
printf("%d %d %d\n",max_h[i],i,j);
}
}
}
return 0;
}