C语言:这样求鞍点为啥不对呢?不知道错在哪...

来源:百度知道 编辑:UC知道 时间:2024/05/25 18:01:59
#include<stdio.h>
main()
{
int a[3][4],max,maxj,flat=1,j,k,i;
printf("请为二维数组赋值:\n");
for(i=0;i<3;i++)
for(j=0;j<4;j++)
scanf("%d",&a[i][j]);

for(i=0;i<3;i++)
{ max=a[i][0];
for(j=0;j<4;j++)
if(max<a[i][j])
{max=a[i][j];
maxj=j;}

for(k=0;k<3;k++)
if(a[k][maxj]<max)
{flat=0;continue;}
}

if(flat==1)
printf("no exist\n");
if(flat==0)
printf("a[%d][%d]=%d",k,maxj,max);

}
鞍点就是数组中一个数 在这行中这个数是最大的,但在该数所在的列,这个数却是最大的找出这个数..

没看懂程序的目的是什么,能否透露下鞍点的含义,谢谢

说错了吧?是不是行的最大,列的最小?
行最大,列最小,如下,照着你的修改了一点,主要是列最小那里的逻辑有问题:
#include<stdio.h>
main()
{
int a[3][4],max,maxj,flat=1,j,k,i;
printf("请为二维数组赋值:\n");
for(i=0;i<3;i++)
for(j=0;j<4;j++)
scanf("%d",&a[i][j]);

for(i=0;i<3;i++)
{ max=a[i][0];
for(j=0;j<4;j++)
if(max<a[i][j])
{max=a[i][j];
maxj=j;}

for(k=0;k<3;k++)
if(a[k][maxj]<max)
{break;}
if(k==3){flat=0;break;}
}

if(flat==1)
printf("no exist\n");
if(flat==0)
printf("a[%d][%d]=%d",i,maxj,max);

}

什么意思?? 你能不能说清