鞍点,即该位置上的元素在该行上最大,在该列上最小。也可能没有鞍点。
求 9 80 205 40
90 -60 96 1
210 -3 101 89
的鞍点
#include<stdio.h>
#define N 3
#define M 4
int main()
{
int a[N][M],max,min,i,j,k;
max=a[0][0];min=a[0][0];
printf("请输入数组:\n");
for(i=0;i<N;i++)
for(j=0;j<M;j++)
scanf("%d",&a[i][j]);
for(i=0;i<N;i++)
{ for(j=0;j<M;j++)
printf("%5d",a[i][j]);
printf("\n");
}
for(i=0;i<N;i++)
{
for(j=0;j<M;j++)
{if(max<a[i][j])
{max=a[i][j];
k=j;
}
}
for(i=0;i<N;i++)
{if(min>a[i][k])
min=a[i][k];
}
if(min==max)
printf("鞍点为:%d\n",max);
}
printf("搜索结束");
return 0;
}
我的思路算法是输入数组后再输出显示一遍,然后一行一行的比较,比较出一行的最大值max后,记住列的位置为K,然后比较K列的最小值min,如果max=min则是鞍点。
但是不知道哪里出错了,求指点。
修改完成:
#include<stdio.h>
#define N 3
#define M 4
int main()
{
int a[N][M]={9,80,205,40,90,-60,96,1,210,-3,101,89},max,min,i,j,k;
/*printf("请输入数组:\n");
for(i=0;i<N;i++)
for(j=0;j<M;j++)
scanf("%d",&a[i][j]);
*/
for(i=0;i<N;i++)
{ for(j=0;j<M;j++)
printf("%5d",a[i][j]);
printf("\n");
}
for(i=0;i<N;i++)
{
max=a[i][0];
for(j=1;j<M;j++)
{if(max<a[i][j])
{max=a[i][j];
k=j;
}
}
min=a[0][k];
for(j=1;j<N;j++)
{if(min>a[j][k])
min=a[j][k];
}
if(min==max)
printf("鞍点为:%d\n",max);
}
printf("搜索结束");
return 0;
}
本回答被网友采纳