题目:
练习3:求鞍点 --->常考题
鞍点:行中是最大,列中是最小 输出鞍点以及鞍点的位置(1,2)
4 6 6 多个鞍点
1 8 7
6 9 9
自我学习思路:
优先从行找,找出该行最大值,记录最大值,并保留最大值的列,对该列每一行进行比较,判断是否有比该记录的最大值小的数(行的最大值为该列的最小值时该点为鞍点),如果没有比该最大值小的数,则该最大值的坐标为鞍点,反之继续向下遍历。
(每次只判断一个点是否为鞍点,该点后和鞍点相等的值留到下次判断)
int main()
{
int m,n,i,j,k;
int max;
printf("输入二维数组的行和列:\n");
scanf("%d%d",&m,&n);
int a[m][n];
printf("输入二维数组的元素数据:\n");
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
scanf("%d",&a[i][j]);
}
}
for(i=0;i<m;i++)
{
max = a[i][0];
//找到行中最大值
for(j=0;j<n;j++)
{
if(max < a[i][j])
{
max =a[i][j];
}
}
//在该行,找到跟最大值相等的数
for(j=0;j<n;j++)
{
if(max == a[i][j])
{
//在该列,比较max是否为该列最小值
for(k=0;k<m;k++)
{
if(max>a[k][j])//max不是所在列的最小值
{
break;
}
if(k == m-1)//该列的最小值没有比该行最大值小的数,即max为所在行的最大值、所在列的最小值
{
printf("%d(%d,%d)\n",a[i][j],i,j);//输出鞍点
}
}
}
}
}
return 0;
}
eg:
本文章只用于对自己的学习